我想使用 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
听起来wget
Firefox 并没有解析 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