当我使用浏览器保存此页面时: http://maine.craigslist.org/fuo/ 链接以链接到内容的方式保存。像这样:href="http://maine.craigslist.org/fuo/4323535885.html"
当我尝试使用 wget 时,链接是
$ wget --no-parent maine.craigslist.org/fuo
保存为:href="/fuo/4305913395.html"
我尝试过以下选项:
--spider
--page-requisites
--user-agent="Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"
但所有链接都没有附加 URL。
我让脚本的其余部分运行起来,解析出我的位置,并生成我所在区域家具的新链接列表。但我搞不清楚如何获得与通过 Firefox 保存页面时相同的输出。
我以为使用 wget 是最简单的。也许事实并非如此。如果我能使用其他软件实现同样的效果,只要我能编写一个脚本让它工作,我就会很高兴。
答案1
该--convert-links
选项应该可以满足您的要求:
wget --convert-links --no-parent maine.craigslist.org/fuo
有关此选项及其功能的更多信息如下(复制自man wget
):
--转换链接 下载完成后,转换文档中的链接 使其适合本地观看。这不仅影响 可见的超链接,但链接到文档的任何部分 外部内容,例如嵌入的图像、样式表链接, 指向非 HTML 内容的超链接等 每个链接将以以下两种方式之一进行更改: · Wget 下载的文件链接将会 更改为以相对链接形式引用它们指向的文件。 例如:如果下载的文件 /foo/doc.html 链接到 /bar/img.gif,也下载了,那么 doc.html 中的链接将 修改为指向 ../bar/img.gif。这种 变换对于任意组合都可靠地起作用 目錄。 · Wget 尚未下载的文件的链接将会 更改为包含主机名和绝对路径 他们指向的位置。 例如:如果下载的文件 /foo/doc.html 链接到 /bar/img.gif(或 ../bar/img.gif),然后是 doc.html 中的链接 将被修改为指向http://hostname/bar/img.gif。 因此,本地浏览可以可靠地工作:如果链接文件 已下载,则链接将引用其本地名称;如果已下载 未下载,链接将引用其完整的互联网地址 而不是呈现一个断开的链接。事实上,前者 链接转换为相对链接可确保你可以移动 下载的层次结构到另一个目录。
答案2
如果你在浏览器中查看在线页面的页面源代码,你会看到文档中的链接是相对的。浏览器会自动转换它们,但 wget 无法做到这一点。
为了使页面在浏览器中正确显示,解决方案是使用HTML <base> 标签。只需将其添加<base href="http://maine.craigslist.org/fuo">
到下载文件的头部部分,所有链接就会指向正确的绝对位置。您可以在脚本中自动执行此操作。
如果您希望脚本对链接执行进一步的操作,最好的解决方案是让脚本在每个链接前面添加基本 URL。