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


34

使用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®ion=usa&culture=en-US,其中字符串ICENX是共同基金的代号,我将更改为许多不同的股票代号。在浏览器中查看时,这将下载数据表,但是如果使用WGET提取数据表,则会丢失该数据表。


是哪个网址?
Braiam 2014年

2
最初的HTML很可能是使用AJAX技术通过下载并填充表格的javascript片段填充的。在这种情况下,您可能会更幸运,因此可以调用此脚本。就像Braiam所问的那样,如果您提供URL,我们也许可以更好地帮助您解决此问题。
roadmr 2014年

1
广告更多信息:在浏览器中,当您显示源代码时,看不到原始HTML(与wget相同),但是HTML由javascript / ajax更新。现代浏览器显示的是此类生成的源代码,而不是纯HTML。
Vrata Blazek

Answers:


39

正如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脚本以转储您感兴趣的内容。


这也行不通,例如cotrino.com/lifespan
mrgloom,

JS生成的链接将无法与此配合使用
QkiZ

1
2018年:PhantomJS项目被暂停,直到另行通知:(
1rq3fea324wre

此解决方案仅用于从指定的URL下载页面。您如何通过管道传递wget的网站爬网机制?另外,无头的chrome脚本看起来像什么?
Phil

10

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

例:

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

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

选项:

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

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

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

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

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


2
这不适用于javascript呈现的内容。为此,您需要使用phantomjs作为柠檬挤压的答案。
马蒂亚斯(Mattias)

1
此cmd还将遍历所有子URL,这些URL将下载呈现给定网页不需要的资源。
1rq3fea324wre

3

可以使用代替--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选项(在阅读手册页时使用“ /”进行搜索)。


2

如果服务器的答案因询问源而异,则主要是由于来自询问源的请求提供了HTTP_USER_AGENT变量(只是文本字符串),从而使服务器了解技术。


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

  2. 根据WGET手册,此参数应起作用 --user-agent=AGENT


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.