LoginSignup
11
8

More than 5 years have passed since last update.

JavaScriptで描画された<a>タグも含めてページ内のリンクをすべて取得したい

Posted at

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 # ブラウザ終了
11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8