OPEN SOURCE LABORATORY

投稿日:2011年4月13日 -投稿者 S.M.

rubyでスクレイピング

今回のネタはrubyを使ったスクレイピングについてです。

PHPとかでもできますが、敢えてrubyで挑戦してみました。
ということで、早速スクレイピングしてみたいと思います。
まずは弊社HP(http://www.kdl.co.jp/)からaグのみを抜き出してみましょう。
検証した環境は以下の通り。
バージョンがちょっと古いですが、1.8系であれば最新版でも動くかと思います。
ruby 1.8.5 (2006-08-25) [i386-linux]
ruby-gem 1.3.5
nokogiri 1.4.4
ソースは以下のとおり。
■ sample.rb
$KCODE = “UTF8″
require ‘rubygems’
require ‘nokogiri’
require ‘open-uri’
page = open(“http://www.kdl.co.jp/”)
html = Nokogiri::HTML(page.read, nil, ‘UTF-8′)
html_a = html.search(‘//a’)
html_a.each_with_index do |a, i|
  puts a
end
さてさて、結果は...

sample.png
ご覧のとおり、<a>~</a>の部分が抜き出せました。
次はもう少し難しくして、ヘッダータブのaタグのみ抜き出してみたいと思います。
ヘッダー部分のHTMLソースは以下のようになっているため、<div id=”globalNav”>が抜き出せれば何とかなりそうです。
<div id=”globalNav”><!–globalNav start –>
<ul>
<li id=”home”><a class=”active” href=”index.html”>ホーム</a></li>
<li id=”kdlsolution”><a href=”webproduce/index.html”>ソリューション</a></li>
<li id=”kdlworks”><a href=”works/index.html”>事例紹介</a></li>
<li id=”company”><a href=”company/index.html”>会社概要</a></li>
<li id=”csr”><a href=”csr/index.html”>CSRへの取組み</a></li>
<li id=”recuruit”><a href=”recruit/index.html”>採用情報</a></li>
</ul>
</div>

ということで、グローバルナビ内のaタグを抜き出すには、html.search(xxx)部分のxpathを変更します。変更したものがこちら↓
■ sample2.rb
$KCODE = “UTF8″
require ‘rubygems’
require ‘nokogiri’
require ‘open-uri’
page = open(“http://www.kdl.co.jp/”)
html = Nokogiri::HTML(page.read, nil, ‘UTF-8′)
html_a = html.search(‘//div[@id="globalNav"]//a’)
html_a.each_with_index do |a, i|
  puts a
end
さて、結果はどうなったかというと、、、
sample2.png
ご覧のとおり、目的の<a>~</a>タグだけ取得することができました。
javascriptで表現されたタグをスクレイピングするにはwatirなどを使う必要がありますが、
単純なHTMLであれば、nokogiriで十分対応できますね。
wrote by S.M.