Rubyによるクローラー開発技法 vol3 ~他人よりまず自分を疑う~
chapter2を進めていきましょう。
chapter2では、「Anemone」というライブラリを使って
Amazonのウェブサイトから書籍のランキング情報を取得する
クローラーを作っていくようです。
ちなみに、Anemoneってどういう意味?と思って
調べてみたら、植物の名前ぽいです。
花言葉は「はかない夢」とか「薄れゆく希望」とか。
このブログの事を言われてるみたいで嫌ですね笑
Anemoneを使ったクローラーの開発はすごく簡単で、
わずかなコードで実現できます。
1: require 'anemone' 2: 3: url = "http://www.amazon.co.jp/gp/bestsellers/books/" 4: 5: Anemone.crawl(url, :depth_limit => 1, :skip_query_strings => true) do |anemone| 6: anemone.on_every_page do |page| 7: puts page.url 8: end 9: end
これだけで、
Amazonのウェブサイトから
書籍の売れ筋ランキング
のURL一覧を取得できます。
一つずつ説明していきます。
1行目のrequire 'anemone'
は
anemoneを使用するための記述です。
3行目の変数url
には、
クローラーの出発点となるurlを指定します。
今回は、書籍の売れ筋ランキングのurlをセットしています。
5行目以降が実際にクロールしてくれる処理です。
Anemone.crawl
メソッドの
第1引数に、urlをセットします。
第2引数に、クロールする際のオプションを指定します。
今回は、以下を指定
- :depth_limit
ページ内のリンクをどこまでたどるか - :skip_query_strings
URLに付与する?で始まるオプション文字列をスキップするか
最後に6行目で、
ページ毎に処理を書いています。
今回はurlを出力(puts)しているだけです。
以上の事を書くだけでクロールしてくれます。
Anemoneを使うと簡単にクロールできますね。
ただ、本当の事を言うと私は簡単にできませんでした。
ある箇所で詰まってしまったからです。
以下のソースを見てください。
1: require 'anemone' 2: 3: url = "http://www.amazon.co.jp/gp/bestsellers/books/" 4: 5: Anemone.crawl(url, :depth_limit => 1, :skip_query_strings => true) do |anemone| 6: anemone.on_every_page do |page| 7: puts page.uri 8: end 9: end
初めはこのように書いていました。
さっきのソースコードとどこが違うかわかりますか?
これを実行すると、Anemone.crawが呼び出された後、
on_every_pageの処理中に何も反応がなくなり、
ずっと待機状態になります。
エラーも一切出ません。
本の通りに書いたのになぜ動かないのか?
- Webサイトのクロールに時間がかかっているだけと思い、少し待ってみたり
- 本の記述が間違っている可能性があると思い、ネットで正誤表を調べたり
- そもそも私のMacの環境が悪くてAnemoneが上手く動作しないんじゃないかと疑ったり
と色々試行錯誤したんですが、わからず。
2時間ぐらいかかってようやく解決できました。
puts page.uri
ん?
あれ?
page.urlの最後の文字がiになってる!
今回学んだ事
他人よりまず自分を疑う
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
- 作者: るびきち,佐々木拓郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/08/25
- メディア: 大型本
- この商品を含むブログ (8件) を見る