当前位置: 首页>>技术教程>>正文


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

问题描述

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

更多信息:

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

最佳思路

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

您需要一个支持 JavaScript 的无头浏览器,例如 phantomjs

$ 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 选项的更多信息,请阅读本文的更多信息:\n Overview About all wget Commands with Examples ,或查看 Wget’s man page

第三种思路

使用 --page-requisites 而不是 --recursive ,它将继续前进,并且 “spider” 您的 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 选项(在阅读手册页时使用 “/” 进行搜索)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12883.html,未经允许,请勿转载。