Rubyでscraping
■Rubyでスクレイピングするためのツール
"ruby scraping"で検索するとこのページが引っかかる。いくつかのツールの紹介と簡単な比較をしてるんだけど、本当にさわりだけなのでやっぱり自分である程度試してみる必要がある。あと、若干情報が古い。
自分は結論から言うとMechanizeを使う事にした。理由は以下の通り。
- ページのこのリンクをクリックして次のページでフォームにこれを入れて…みたいな感じの操作を、比較的直感的にプログラムで記述できる。
- 依存パッケージが少ないので(nokogiriだけ)インストールが楽
- 割とメンテナンスがされている
■使い方で分かりづらかった事
使い方はドキュメントを見れば大体分かるとして、ドキュメントだと分かりづらい点をいくつか紹介。
○画像の保存
agent = Mechanize.new do |obj| obj.user_agent_alias = 'Windows IE 7' end # (中略) # これでページ内のimageタグ一覧が取得できる。 somepage.images # 画像の中身を取得してファイルに保存する場合は somepage.images.each do |img| imgfile = agent.get(img.src) imgfile_path = '/foo/bar/' + imgfile.filename imgfile.save_as(imgfile_path) end
○フレームの表示
最近はフレームを使ったページも少なくなったけど、たまに使う機会があるかも。ポイントはclickメソッド。
frame = somepage.frames_with(:name => "framename")[0].click
○デバッグ
モジュール自体をデバッグしたい時、ログレベルを変更する。実際にこれを使って、Mechanizeのバグらしき物を発見できた。
require 'rubygems' require 'mechanize' require 'logger' agent = Mechanize.new do |obj| obj.user_agent_alias = 'Windows IE 7' obj.log = Logger.new(STDOUT) obj.log.level = Logger::DEBUG end