wget:遵循自定义 URL 属性

wget:遵循自定义 URL 属性

wget 是一个很棒的工具,可以快速制作小型站点的快照。据我所知(我真的希望我只是在 中找不到它wget --help),wget 只能遵循众所周知的 HTML URL 属性,例如<a href=...等等<img src=...。然而,有时特定站点可能使用非标准属性来表示与 wget 的 URL 不同的真实 URL。比方说,如果一个网站有一个包含缩放图像的“静态”图库,则特定图像页面可能会具有以下内容:

<div zoomed_img="/gallery/image.jpg">
    <img src="/gallery/image_small.jpg"/>
</div>

因此,wget 会忽略zoomed_img带有 的属性/gallery/image.jpg。我的 wget 命令是:

wget --recursive \
    --domains domain \
    --no-parent \
    --page-requisites \
    --no-clobber \
    --html-extension \
    --convert-links \
    http://domain/gallery

是否可以使 wget 遵循自定义 URL HTML 属性?

答案1

wget(至少 1.16.3)不允许用户指定自定义属性。已经有一个建议--follow-tags使用类似 的语法扩展选项--follow-tags=a/href,但没有人跟进。

如果您不介意对 wget 进行快速修改以支持您的场景,请参阅这次提交用于添加自定义标签或属性所需的工作。

或者,您可以自己编写一个后处理器。

答案2

作为获取不允许跟随数据源,我的解决方案是使用代理来替换所有“数据-src” by “src”在飞行中。

使用https://mitmproxy.org/例如,使用以下脚本:

"""
Fix the lazy loader SRC.
"""
from mitmproxy import http

def response(flow: http.HTTPFlow) -> None:
    if flow.response and flow.response.content:
        flow.response.content = flow.response.content.replace(
            b"data-src", b"src"
        )

运行代理:

mitmdump -s src.py --ssl-insecure

告诉 wget 使用代理:

wget -e use_proxy=yes -e http_proxy=localhost:8080 -e https_proxy=localhost:8080 --mirror --convert-links --adjust-extension --page-requisites --no-parent --progress=dot --recursive --level=6 --reject-regex "(.*)\?(.*)" --no-check-certificate https://website.com/

结果是 wget 将通过本地代理来镜像整个网站,本地代理会在 wget 读取 HTML 之前动态编辑 HTML。这样图片url就被发现了。

相关内容