Webサイトの調査をしようと思い、サイトクローラーが必要になりました。
各言語ごとに色々あるので何を使うか悩むところですが、Rubyでお手軽にということでAnemoneを採用しました。
ちなみに他の言語だと、下記のうちのどれかが良いのではないでしょうか?
Java:Nutch、S2Robot
Perl:Gungho
余談ですが日本語で検索する場合、WEBクローラーで検索するかWEBスパイダーで検索するか悩みます。英語だとWeb SpiderかWeb Crawlerです。どちらかといえばWeb Spiderが一般的のようです。日本だとWEBクローラーの方が目的のものに辿り着きやすいような気がします。うーん、悩ましい。
Anemoneのインストール手順
Anemoneは、nokogiriを使います。
nokogiriが入っていれば、すんなりインストールも出来ると思います。
ちなみにnokogiriは、libxml2とlibxsltを必要とします。
ビルド用にヘッダーも必要になるので、併せてインストールしておいて下さい。
yum install -y libxml2 libxml2-devel libxslt libxslt-devel
nokogiriのインストール
# gem install nokogiri
anemone gemのインストール
# gem install anemone
Anemoneの使い方
Web上のサンプル通りに使えば、簡単に使えます。
require 'rubygems' require 'anemone' Anemone.crawl("http://www.example.com/") do |anemone| anemone.on_every_page do |page| puts page.url end end
タイトルの取得はこんな感じ
Anemone.crawl("http://www.example.com/") do |anemone| anemone.on_every_page do |page| title = page.doc.xpath("//head/title/text()").first.to_s if page.doc puts title end end
クローラーにオプション引数も渡せます。
この例ではユーザーエージェントの変更と、クロール間隔を変更しています。
opts = { :user_agent => "AnemoneCrawler/0.00", :delay => 1, } Anemone.crawl("http://www.example.com/", opts) do |anemone| anemone.on_every_page do |page| url = page.url end end
中のオブジェクトに対して、色々な操作が出来ます。
ここではページ内のアウトバンドリンクの一覧をしています。
Anemone.crawl("http://www.example.com/") do |anemone| anemone.on_every_page do |page| page.links().each {|link| puts "link," + url.to_s + "," + link.to_s } end end
詳しくはRDocをご参照ください。
またWebクローラーの何たるかを知りたければ、Spidering hacksがお薦めです。
Enjoy!!
See Also:
複数並行可能なRubyのクローラー、「cosmicrawler」を試してみた
JavaScriptにも対応出来るruby製のクローラー、Masqueを試してみる
あらためてRuby製のクローラー、"anemone"を調べてみた
- 作者: るびきち,佐々木拓郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/08/25
- メディア: 大型本
- この商品を含むブログ (1件) を見る
Spidering hacks―ウェブ情報ラクラク取得テクニック101選
- 作者: Kevin Hemenway,Tara Calishain,村上雅章
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2004/05
- メディア: 単行本
- 購入: 52人 クリック: 904回
- この商品を含むブログ (103件) を見る