wgetでサイト全体をミラーダウンロードする方法を紹介しましたが、JavaScriptゴリゴリのページはこの方法ではうまくいきません。これはwgetがJavaScriptを解釈しないためです。例えば、次のようなHTMLではwgetはリンク先を見つけることができません。
demo.html
<script>
document.write('<a href="test.html">link</a>');
document.write('<a href="test2.html">link2</a>');
document.write('<a href="test3.html">link3</a>');
</script>
この場合、WebDriverと実ブラウザを使ってJavaScript実行結果を取得するプログラムを実装する必要があります。
以下は、JavaScriptで描画された<a>
タグも含めてページ内のリンクをすべて取得するRubyのサンプルコードです。
gem install selenium-webdriver
main.rb
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox # ブラウザ起動
# ページからURL一覧を取得する関数
def get_all_links(driver, url)
driver.navigate.to url # URLを開く
elements = driver.find_elements(:tag_name, 'a') # aタグ全部
return elements.map {|element| element.attribute('href')} # aタグからhrefを取り出す
end
urls = get_all_links(driver, 'http://localhost:9000/demo.html')
# TODO: 取得してきたURLに対してスクレイピングをかける
driver.quit # ブラウザ終了