【问题标题】:wget messes up the htmlwget 弄乱了 html
【发布时间】:2020-08-26 05:43:52
【问题描述】:

我目前在本地计算机上托管有关 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 标志

【问题讨论】:

  • 这很奇怪。你能在浏览器中查看开发者选项(通常是 F12),然后用wget 构造相同的请求吗?你也可以试试curl吗? Wireshark 告诉你什么?我猜在某些情况下可能是 httpd 发送了损坏的响应?
  • 可能是 Wget 中的一个错误。我有预感,是的。请在 bug-wget@gnu.org 上报告此问题,我们会尽力帮助您。可能是缓冲区大小损坏。
  • 在此期间 - CURL 如何处理这些?

标签: linux web wget ghost-blog


【解决方案1】:

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

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

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

上发布了一个补丁

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

【讨论】:

  • 太棒了!将在我结束时进行测试
猜你喜欢
  • 2013-05-22
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2015-04-21
  • 1970-01-01
  • 2020-01-16
相关资源
最近更新 更多