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
答案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就被发现了。