wget把html弄乱了



我目前正在本地机器上的Ghost CMS上托管一个博客,并使用wget从localhost:2368的托管站点创建一个静态站点。它工作得很好,但我面临的唯一问题是;srcset";一团糟

<img class="post-card-image" srcset="content/images/size/w300/2020/08/logo-1--1.svg 300w,
content/images/size/w600/2020/08/logo-1--1.svgg 600w,
content/images/size/w1000/2020/08/logo-1--1.svgvg 1000w,
content/images/size/w2000/2020/08/logo-1--1.svgsvg 2000w" sizes="(max-width: 1000px) 400px, 700px" loading="lazy" src="content/images/size/w600/2020/08/logo-1--1.svg" alt="Test">

注意600w、100w和2000w作为svgg、svgvg、svgsvg的扩展是如何混乱的。这将阻止加载图像。我需要手动修复HTML中的扩展。

使用localhost:2368上的浏览器保存HTML没有这样的问题。使用浏览器保存HTML时的相同元素

<img class="post-card-image" srcset="/content/images/size/w300/2020/08/logo-1--1.svg 300w,
/content/images/size/w600/2020/08/logo-1--1.svg 600w,
/content/images/size/w1000/2020/08/logo-1--1.svg 1000w,
/content/images/size/w2000/2020/08/logo-1--1.svg 2000w" sizes="(max-width: 1000px) 400px, 700px" loading="lazy" src="/content/images/size/w600/2020/08/logo-1--1.svg" alt="Test">

但这不是一个选项,因为我必须手动递归保存所有内容。

我使用的wget命令是

from_url=localhost:2368
to_url=example.com
to_https=true
export_directory=dist
# Copy blog content
wget --recursive --page-requisites --no-host-directories --remote-encoding=utf-8 --directory-prefix=${export_directory} --adjust-extension --restrict-file-names=windows --timeout=30 --no-parent --convert-links ${from_url}/

使用wget 1.20.3我已经在没有--remote编码标志的情况下尝试过了

我看到了同样的事情,试图抓取Wordpress网站。srcset列表中每个逗号分隔的元素的末尾都被从空格开始的损坏,用额外的字符替换空格和条件。

我深入研究了源代码,发现计算srcset中各个URL的长度有问题——在转换最终文件时,代码会根据解析元素时看到的URL长度跳过刚刚转换的URL但是解析是在原始URL中的解码转义后执行的,因此跳过的长度可能太短(因为解码可能会减少URL的长度(。

我设法通过计算重新转义的URL的长度来修补它,以处理我的案件。我在发布了一个补丁

https://lists.gnu.org/archive/html/bug-wget/2020-12/msg00021.html

最新更新