使用 Wget 保存单个网页(带背景图片)

使用 Wget 保存单个网页(带背景图片)

我想使用 Wget 保存单个网页(不是递归,不是整个网站)以供参考。很像 Firefox 的“网页,完整”。

我的第一个问题是:我无法让 Wget 保存 CSS 中指定的背景图像。即使它确实保存了背景图像文件,我也不认为 --convert-links 会将 CSS 文件中的背景图像 URL 转换为指向本地保存的背景图像。Firefox 也有同样的问题。

我的第二个问题是:如果我想要保存的页面上的图像托管在另一台服务器上(例如广告),这些图像将不会被包含在内。--span-hosts 似乎无法通过下面的行解决该问题。

我在用着: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html

答案1

来自Wget 手册页

实际上,为了下载单个页面及其所有必需内容(即使它们存在于不同的网站上),并确保所有内容在本地正确显示,除了“-p”之外,作者还喜欢使用一些选项:

wget -E -H -k -K -p http://www.example.com/

另外,如果robots.txt不允许你添加-e robots=off

答案2

wget命令提供选项--mirror,其功能与以下内容相同:

$ wget -r -N -l inf --no-remove-listing

您还可以为-x网站创建整个目录层次结构,包括主机名。

wget但是,如果您没有使用最新版本,您可能无法找到它。

答案3

听起来wgetFirefox 并没有解析 CSS 链接以将这些文件包含在下载中。您可以通过 wget 解决这些限制,并从下载文件中的任何 CSS 或 Javascript 编写链接提取脚本以生成您错过的文件列表。然后wget对该链接列表进行第二次运行可以抓取错过的任何内容(使用标志-i指定文件列表 URL)。

如果你喜欢 Perl,这里有一个CSS::解析器CPAN 上的模块可能为您提供一种以这种方式提取链接的简单方法。

请注意,这wget只是解析某些 html 标记 ( href/ src) 和 css uri ( url()) 来确定要获取哪些页面要求。您可以尝试使用 Firefox 插件(如 DOM Inspector 或 Firebug)来确定您未获取的第三方图像是否是通过 Javascript 添加的 - 如果是这样,您需要借助脚本或 Firefox 插件来获取它们。

答案4

我制作 Webtography 的目的类似: https://webjay.github.io/webtography/

它使用 Wget 并将网站推送到您的 GitHub 帐户上的存储库。

我使用以下论点:

--user-agent=Webtography
--no-cookies
--timestamping
--recursive
--level=1
--convert-links
--no-parent
--page-requisites
--adjust-extension
--max-redirect=0
--exclude-directories=blog

https://github.com/webjay/webtography/blob/master/lib/wget.js#L15-L26

相关内容