生成されたページソースのクロール

生成されたページソースのクロール

私がスクラップしたいソースはこれDOI(Document Object Identifier)リダイレクトを活用した研究記事のウェブサイト:

doi=10.1006/jfin.1996.0208
url=$(curl -L -s -w %{url_effective} "http://dx.doi.org/"$doi -o /dev/null)
curl -L --referer ";auto" $url > test.htm --dump-header /dev/null

ただし、ファイル/ソースは、ブラウザでリンクを開くときに見えるものとは異なるように見えます。たとえば、参照リストは20項目に制限されており、項目へのリンクを表示するのではなく、「ロード中」のみが表示されます。

明らかに、ソースはブラウザ(FF)に表示されるものとは異なります。実際にウェブサイトのソースファイルを見るとこれ生成されたソースコードをブックマークに追加すると、必要なソースファイル全体を取得できます。

Webページで生成されたソースコードを取得する方法はありますか?見てこれ詳細なマニュアルでは、ソースの生成に関する内容が見つかりません。

ベストアンサー1

Curlは「メイン」ページのみを処理します。ページにJavaScriptによってロードされたコンテンツがある場合curl

「完全な」ページを取得するために私が見つけた最良の方法は、次のものを使用することです。セレンそして、いくつかのスクリプトで駆動します(私はPythonを使ってこれを行います)。保証がないため、完全性は相対的です。一度JavaScriptの読み込みが完了しました。

たとえば、Python virtualenvで次のように実行します。

pip install selenium
python dl.py  http://unix.stackexchange.com/q/210268/33055 /var/tmp/page.html 5

そしてdl.py

import sys
import time
from selenium import webdriver

url, file_name, seconds = sys.argv[1:4]
browser = webdriver.Firefox()
try:
    browser.get(url)
    time.sleep(int(seconds))
    with open(file_name, 'w') as fp:
        fp.write(browser.find_element_by_xpath('html').get_attribute(
            "outerHTML").encode('utf-8'))
finally:
    browser.close()

おすすめ記事