HTMLパーサー「Nokogiri」

RubyのHTMLパーサーとしては"Nokogiri"というライブラリがよく使われています。

インストールは gem install nokogiri などとしてください。まずURLをopenしてNokogiriドキュメントを生成してみます。

文字列として読み込んだHTMLをパースしてNokogiri::HTML::Documentオブジェクトを作成しています。

Nokogiri::HTML::Documentが継承しているNokogiri::XML::Nodeは要素検索のためのメソッドを持っています。たとえばNokogiri::XML::Node#atはセレクタでヒットした最初の要素(Element)を返すメソッドです。

また、Nokogiri::XML::Node#cssNokogiri::XML::Node#xpathはヒットした要素すべてをNokogiri::XML::NodeSetにまとめて返します。例としてAllAboutトップページのメイン記事リストから、記事タイトルとリンク先URLをまとめて抜き出して出力してみます。

top2

Nokogiri::XML::NodeSetをeachで回した個々のNokogiri::XML::Element(li)に対してtextメソッドで表示テキストを、atで1階層降りた先のattrでhref属性値を取得しています。

次回

今回の記事で、WebのHTMLを取得・パースする方法を紹介しました。単純なHTMLだけならNokogiriで大抵のことは出来るのですが、フォームに値を入れて送信したり(ログイン操作含む)JavaScriptを実行したりと高度なことをやるには向いていません。

そこで、次回の記事ではRubyプログラムでブラウザを制御し、実際にユーザが操作しているのと同じ条件でWebからデータを抽出する方法を紹介します。



※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。