问题描述
使用网络浏览器(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®ion=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
选项(在阅读手册页时使用 “/” 进行搜索)。