この記事では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