抓取生成的页面来源

抓取生成的页面来源

我正在尝试抓取的来源一篇研究文章的网站,利用其文档对象标识符 (DOI) 的重定向:

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)向我显示的不同。事实上,当我使用查看网站的源文件时书签来查看生成的源代码,我得到了我想要的完整源文件。

现在有没有办法抓取网页生成的源码呢?看看详细手册,我找不到与生成源相关的任何内容。

答案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()

相关内容