世界はますます速く回転しており、この加速は私たちの生活のあらゆる面で顕著である。特にビジネスに関しては、そのスピードが重要視されている。この狂おしいほどの加速の中で、不変なのは変動性だけである。このペースに追いつき、ますます激化する競争に打ち勝つために、企業は効率を高め、市場投入までのスピードを上げる方法を模索している。このことが、Ruby on Railsのようなプログラミング言語の人気の背後にある熱狂を説明している。Ruby on Railsがさらに素晴らしいのは、搭載されている宝石の数の多さだ。あるツールを想像すれば、おそらくあなたのRubyキットの中にあるはずだ。Ruby on Railsに最適なgemの1つがNokogiriで、XMLとHTMLドキュメントを扱うライブラリです。Nokogiriのようなパーサーの最も一般的な用途は、構造化されたドキュメントからデータを抽出することです。例えば
- 価格比較サイトの価格リスト。
- 検索エンジンからの検索結果リンク。
- Q&Aサイトの回答一覧。
インストール:
OS X:
macportsからlibxml2をインストールする:
$ sudo port install libxml2 libxslt
そして、ノコギリをインストールする:
$ sudo gem install nokogiri
Linuxだ:
Linuxでは、libxml2をインストールする必要がある。libxml2をインストールするコマンドは、使用しているパッケージ・マネージャーとLinuxディストリビューションによって異なります。
Fedoraで:
$ sudo yum install libxml2-devel libxslt-devel
$ gem install nokogiri
Ubuntuで:
$ sudopt-get install libxml2 libxml2-dev libxslt libxslt-dev
$ gem install nokogiri
ノコギリを始めよう
Nokogiriをインストールしたら、早速使ってみよう。NokogiriはXPathまたはCSS3セレクタを使うことができます。CSSセレクタが使えるので、HTMLドキュメントからデータを抽出するのにとても適している。
「rubygems」が必要です
require 'nokogiri'
require 'open-uri'
nokogiri gemだけでなく、open-uriも必要なので、URLの内容を簡単に見つけることができる。次に、新しいNokogiri HTMLドキュメントを作成し、検索結果ページの内容を渡します。at_cssでCSSセレクタ "title "を渡すと、
基本的な構文解析:
Nokogiriでは、HTMLやXMLドキュメントをいくつかの異なる方法で解析することができます:
- DOM
- サックス
- リーダー
- プル
これらの戦略にはそれぞれ異なる長所と短所がある。DOMインターフェイスは最も一般的で、一般的に最も使いやすいとされている。
列の最後の商品であるすべての商品は、異なるクラスを持っている:
<div class="”product" lastcol”>
<a href="/ja/”/product/f05f/”/" class="”product_link”">
<img
src="/images/dot_clear.gif"
title="再利用可能な散弾銃の薬莢ボトルに入った、この強力なエネルギー・ショットで眠りを破壊せよ"
alt="Zombie Blast Energy Shots 3パック"
幅="125
高さ="125
class="lazy"
data-original="http://a.tgcdn.net/images/products/thumb/largesquare/f05f_zombie_blast_energy_shots.jpg"
/>
<h4>ゾンビ・ブラスト・エナジー・ショット 3パック</h4>
</a>
<p>$9.99</p>
</div>
つまり、商品名を知るためにはこう言うのだ:
英語だ: ドキュメントのルートから始める:「product」という単語を含むクラス名を持つすべてのdivを探す。その中にリンクを見つける。そのリンクの中でh4テキストを見つける。
XPath: //div[contains(@class,'product')]/a/h4
XPath の等号演算子は、完全な値 (この場合は文字列) にのみマッチします。XPath はクラス名全体にしかマッチしないので、Xpath で div[@class='product'] を指定しても、最後のカラムを取得することはできません。
参照: