じょーかじょーか

あの頃のマーシー

Rubyでのクローラー開発でデバッグ時にhtmlファイルを出力する

クローラーを作っていると、現在どんなページに対して処理しているのか、想定通りのページなのか、確認したいことが多々あると思います。
ビジュアル的に確認したい時、Capybaraとかだとsave_screenshotメソッドとかで簡単に確認出来ますが、Mechanizeなどのブラウザエンジンが組み込まれていない系ライブラリの場合、気軽に確認するのは難しいと思っていました。
だから毎回ページのソースをputsして頑張って確認していました。
しかしterminalに出力されるhtmlコードを何回も確認しているうちに発狂したので、簡単にファイルを生成する方法を調べた所、すごい簡単な方法を知りました。File.write先輩です。

クローラー開発に使用するライブラリがなんであれ、htmlソースを返すメソッドはあると思います。
NokogiriだったらNokogiri::HTML::Document#to_htmlで
MechanizeだったらMechanize::Page#bodyかMechanize::Page#contentで
AnemoneだったらAnemone::Page#bodyで
htmlソースを取得して、それをFile.write先輩の第二引数に渡します。第一引数は生成するファイル名です。

source = page.body
File.write('check.html', source)

たったこれだけでhtml生成出来るんですね。Rubyは便利でした。

def check(source, file_name = 'check.html')
  File.write(file_name, source)
end

このcheckメソッドを作った後の僕の人生が好転したのは言うまでもありません。彼女が出来そうになりました。