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-encoding标志

解决方法

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

我挖掘了源代码,发现在计算 srcset 中各个 URL 的长度时有问题 - 在转换最终文件时,代码会根据它的 URL 长度跳过它刚刚转换的 URL解析元素时看到。 但是解析是在对原始网址中的转义进行解码后进行的,因此跳过的长度可能太短(因为解码可能会减少网址的长度)。

我设法通过计算重新转义的 URL 的长度来修补它以处理我的情况。我在

上发布了一个补丁

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...