RubyとNokogiriを使ってHTML解析・スクレイピングをしよう

Ruby

この記事ではRubyのgemであるNokogiriを使ってHTML解析やスクレイピングをしてみようと思います。

Nokogiriのインストール

まずはNokogiriをインストールします。

$ gem install nokogiri

これでインストール完了です。
それでは実際に使っていきましょう。

簡単なHTMLでNokogiriを試してみる

まずは簡単なHTMLでどのようにNokogiriを使うのか試してみましょう。

require 'nokogiri'

# HTMLを解析する場合
html = Nokogiri::HTML("<html><body><h1>Hello Nokogiri</h1><p><a href='https://example.com'>How to parse HTML</a></p></body></html>")

html.at_css("h1").text # => "Hello Nokogiri"
html.css("p").first.text # => "How to parse HTML"
html.css("p a").attribute('href').value # => "https://example.com"

上記のコードのように、at_cssを使うとHTML文章の中から1番最初に出てくる要素をCSSの形式で検索することが出来ます。
また、cssを使うとHTML文章内から複数要素を取得することが出来ます。
属性を取得するためにはattributeを使います。属性の中身を取得したいときはvalueを使うと取得出来ます。

HTML文章の検索の方法は、xpath形式css形式があるのですが、ウェブ制作者などであればいつも使い慣れているcss形式がよいでしょう。

実際にGoogleのサイトからロゴのパスを取得してみましょう。

実際に解析してみる

それでは実際に解析してみましょう。
ウェブサイトの解析をする場合はhttpなどからデータを取得する必要があるので、open-uriを使用しています。

require 'open-uri'
require 'nokogiri'

url = 'https://www.google.com/'
charset = nil
html = open(url) do |h|
  charset = h.charset
  h.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)

puts doc.at_css("#hplogo").attribute('src').value
# => /logos/doodles/2018/world-cup-2018-day-11-5692104616443904-5688737870643200-ssw.png

参考リンク