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