webをダウンロードするにはもちろん、open-uriなんかを使うのがいいわよね。
でも最近はJavaScriptなサイトなんかがあって、うまくいかないことも多いわ。
そんな時の究極界はやっぱり、ブラウザを直接コントロールして取得する事よね。スクリーンショットも撮れるのよ。
Firefoxと selenium-webdriver をインストールしましょう。
ちなみに Linux なら headless ドライバもほしいわね。これがあるとすごく便利なのだけど、詳しくは次の機会にね。
じゃあ、以下は基本編。
#!/usr/bin/ruby require 'selenium-webdriver' class Hash def getWeb(fn) driver = Selenium::WebDriver.for :firefox driver.get self["url"] driver.save_screenshot fn r = driver.page_source driver.quit r end end # page = Hash.new page["name"] = "YahooJapan" page["url"] = "http://www.yahoo.co.jp/" source = page.getWeb(page["name"]+".png") File.write(page["name"]+".html",source)
こんなところかしら。
スクリーンショットが、 名前.save_screenshot ファイル名 だけでできる のがまた凄いわね。おもしろーい。
でも本当に面白いのは、ブラウザがちゃんと開いてページロードされ、保存されて終わるとこだと思うけどね。 すごい。
ちなみに、 このままだと便利だけど速度が出ない わよね。さっきの headless っていうのはそこで生きてくるのだけど。
このへんは、また次回ね。
取り込んだホームページが、手で表示した場合と違う時ってあるかしら。特に日本語サイトにならないとか。
実は selenium-webdriverって、ユーザーの標準プロファイルを使わない の。使わせるためには、以下のようにしなくちゃいけないのよ。
driver = Selenium::WebDriver.for(:firefox, :profile => "プロファイル名")
firefoxの方は、 firefox -p で起動するとプロファイル作成ができるから、その時につけた名前を指定してね。
ここはとても詳しいわね!