有没有办法将wget
下载和--convert-links
功能分开?对于那些不熟悉wget
和/或 的人--convert-links
,长话短说,wget 可用于下载网站。--convert-links
修改下载的 html 文件,以便下载的网站可以离线工作。它通过转换href
/ src
/etc 来实现这一点。属性引用本地文件而不是远程网站。
这是官方解释:
-k --转换链接
下载完成后,转换文档中的链接,使其适合本地查看。这不仅会影响可见的超链接,还会影响文档中链接到外部内容的任何部分,例如嵌入图像、样式表链接、非 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://主机名/bar/img.gif。
因此,本地浏览可以可靠地工作:如果下载了链接文件,则该链接将引用其本地名称;如果未下载,该链接将引用其完整的互联网地址,而不是显示损坏的链接。以前的链接转换为相对链接这一事实确保您可以将下载的层次结构移动到另一个目录。
注意,只有下载结束时Wget才能知道哪些链接被下载了。因此,-k 完成的工作将在所有下载结束时执行。
如果(递归)下载被手动中断和恢复,或者如果一-k
开始就没有指定,如何才能在html
文件内获得正常的链接?
似乎甚至--backup-converted
不能使该过程更加健壮,因为 wget 在下载后立即转换链接一切(没有丢失文件),或者你自己(xpath等)
答案1
由于文件是 ASCII 文本,因此.html
您可以使用.包含例如和 的文件应该改为,将未修改的文件保留为..html
sed
http://bad.url/good.part
https://bad.url/good.part
good.url
*.html
*.html.bak
find . -type f -name '*.html' -print0 | \
xargs -0 -r sed -i.bak -e 's%://bad\.url/%://good.url/%'
自然而然地读man find xargs sed