私のブログ “https://yuis-programming.com/” で、記事を検索して最初に出てきた記事のタイトルを取得する、というテストコードになります。
Rubyのmechanizeとnokogiriのスクレイピングの使用例として、Rubyのmechanizeでブログをキーワード検索して最初の投稿を取得する方法についてメモです。
Rubyのライブラリmechanizeとnokogiriを使用します。
やってること:
1. 検索窓をクリックで表示
1. フォームに検索したい値を定義
1. フォームを送信
1. 検索結果のHTMLをnokogiriでパースしてタイトルを取得
以下例のコードです。
require 'mechanize'
require 'logger'
agent = Mechanize.new
agent.log = Logger.new "mech.log"
agent.user_agent_alias = 'Mac Safari'
page = agent.get "https://yuis-programming.com/"
page.link_with(:xpath => '//*[@id="menu-navigator"]/li[4]/a').click
page.form.field_with(xpath: '//*[@id="s"]').value = 'magic'
# page.form.field_with(xpath: '//*[@id="s"]').value = 'ruby'
search_results = agent.submit page.form_with(xpath: '//*[@id="searchform"]')
require 'nokogiri'
require 'open-uri'
Encoding.default_external = 'UTF-8'
doc = Nokogiri::HTML(search_results.body)
puts firstpost = doc.xpath('//div/div/header/h2/a')[0].text