我正在尝试抓取的来源这一篇研究文章的网站,利用其文档对象标识符 (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()