如何让WGET下载与浏览器完全相同的网页html

使用Web浏览器(IE或Chrome),我可以使用Ctl-S保存网页(.html),使用任何文本编辑器进行检查,并以表格格式查看数据。 我要提取的其中一个数字,但对于许多很多网页来说,手动操作太多了。 所以我想使用WGET一个接一个地获取这些网页,并编写另一个程序来解析.html并检索我想要的数字。 但是当使用与浏览器相同的URL时,WGET保存的.html文件不包含数据表。 为什么不? 就好像服务器检测到请求来自WGET而不是来自Web浏览器,并提供缺少数据表的框架网页。 如何使用WGET获得完全相同的网页? – 谢谢!

更多信息:

我正在尝试获取的URL的示例是: http ://performance.morningstar.com/fund/performance-return.action?t=ICENX&region=usa&culture=en-US其中字符串ICENX是共同基金股票代码符号,我将改为任何一个不同的股票代码。 这会在浏览器中查看时下载数据表,但如果使用WGET获取,则会丢失数据表。

正如roadmr所指出的,此页面上的表格是由javascript生成的。 wget不支持javascript,它只是转储从服务器收到的页面(即在任何javascript代码运行之前),因此缺少表。

你需要一个支持像phantomjs这样的javascript的无头浏览器:

$ phantomjs save_page.js http://example.com > page.html 

使用save_page.js:

 var system = require('system'); var page = require('webpage').create(); page.open(system.args[1], function() { console.log(page.content); phantom.exit(); }); 

然后,如果您只想提取一些文本,最简单的方法是使用w3m呈现页面:

 $ w3m -dump page.html 

和/或修改phantomjs脚本以转储您感兴趣的内容。

您可以使用wget --mirror下载完整网站

例:

 wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL 

当您要下载完整网站并可供本地查看时,您要执行的上述命令行。

选项:

  • --mirror打开适合镜像的选项。

  • -p下载正确显示给定HTML页面所需的所有文件。

  • --convert-links下载后转换链接,转换文档中的链接以供本地查看。

  • -P ./LOCAL-DIR将所有文件和目录保存到指定目录。

有关Wget选项的更多信息阅读更多本文: 概述关于所有带示例的wget命令 ,或查看Wget的手册页 。

而不是--recursive ,它将继续并且“蜘蛛”在您的URL中的每个链接,使用--page-requisites 。 应该与您在图形浏览器中描述的选项完全一样。

  This option causes Wget to download all the files that are necessary to properly display a given HTML page. This includes such things as inlined images, sounds, and referenced stylesheets. Ordinarily, when downloading a single HTML page, any requisite documents that may be needed to display it properly are not downloaded. Using -r together with -l can help, but since Wget does not ordinarily distinguish between external and inlined documents, one is generally left with "leaf documents" that are missing their requisites. 

有关更多信息,请执行man wget并查找--page-requisites选项(在阅读手册页时使用“/”进行搜索)。

如果服务器的答案因请求来源而异,那主要是因为HTTP_USER_AGENT变量(只是一个文本字符串)与来自请求源的请求一起提供,通知服务器有关技术。


  1. 您可以在此处查看您的浏览器代理 – > http://whatsmyuseragent.com

  2. 根据WGET手册,此参数应该执行作业--user-agent=AGENT


如果这没有帮助,即可能需要JavaScript处理来获得与浏览器相同的页面,或者可能需要使用GET参数的适当请求,因此服务器将准备不需要JavaScript来填充页面的答案。

--recursive参数。 它会下载所有内容,有时甚至更多你想要的内容。

 wget --recursive http://url.com