投稿日: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.5nokogiri 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 aend
さてさて、結果は...
ご覧のとおり、<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 aend
さて、結果はどうなったかというと、、、
ご覧のとおり、目的の<a>~</a>タグだけ取得することができました。
javascriptで表現されたタグをスクレイピングするにはwatirなどを使う必要がありますが、
単純なHTMLであれば、nokogiriで十分対応できますね。
wrote by S.M.

