BLOGTIMES
2010/02/15

Anemoneというクローラーフレームワークを使ってみる

  ruby  scrape 
このエントリーをはてなブックマークに追加

これまでクローラー使い捨てのクローラーは結構力業で作ってきたのですが、さすがにこういうことをやり始めてから1年以上が経ちこのままでは立ちゆかない事がいろいろと顕在化してきたので、クローラーを作るためのフレームワークをいろいろ調べていました。

JavaであればLuceneのサブプロジェクトであるNutchや、Seasarプロジェクトで開発されているS2Robot、PerlであればGunghoあたりに興味があるのですが、後処理の部分はRubyで書いてしまってあるので今回はAnemoneというフレームワークをつかってみることにします。

Anemone - Ruby Web-Spider Framework

Anemone is a Ruby library that makes it quick and painless to write programs that spider a website. It provides a simple DSL for performing actions on every page of a site, skipping certain URLs, and calculating the shortest path to a given page on a site.

The multi-threaded design makes Anemone fast. The API makes it simple. And the expressiveness of Ruby makes it powerful.

実際につかってみる

インストールはgemを使う場合はgem install anemoneで一撃です。

anemone_test.rb

#!/usr/bin/ruby require 'rubygems' require 'anemone' opts = { :user_agent => "TestRobot/0.00", :delay => 1, :depth_limit => 0, } Anemone.crawl("http://www.yahoo.co.jp", opts) do |anemone| anemone.on_every_page do |page| p page.url p page.doc.xpath("//head/title/text()").first.to_s if page.doc p page.body[0..200] end end

実行結果

#<URI::HTTP:0x15b82243e08c URL:http://www.yahoo.co.jp/> "Yahoo! JAPAN" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n<meta http-equiv"

使い方もシンプルでいいですね。pageからはNokogiriのインスタンス(doc)が取得出来るので、後はこのdocからテキストを抜き出すこともできますし、rawのデータが欲しければbodyにアクセスすることもできます。こんな感じでURLにアクセスして、タイトルを抜き出したり、bodyの先頭200バイトを切り出したりなんかもできるので便利ですね。

ただ、少し使った限りではMechanizeの文字化けと同じような問題を持っているようなので、差し当たりどうやって凌ぐかというのが問題になりそうです。少しソースを読んでみるしかないですね。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3423
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン