wget 没有以所需格式保存链接

wget 没有以所需格式保存链接

当我使用浏览器保存此页面时: 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。

相关内容