gpt4 book ai didi

bash - 使用 bash 使用 wget 下载特定网站文件夹的所有网页

转载 作者:行者123 更新时间:2023-11-29 09:27:45 25 4
gpt4 key购买 nike

我需要下载包含特定网站文件夹 (/content/) 图像的所有网页。尝试访问该文件夹会出现 403 错误,但页面的所有链接都在 index.html 中。它们都共享相同的模式“content.php?id=xx”,其中“xx”是两位到四位数字中的任意数字。

我的想法是下载所有网站并删除除“content”文件夹以外的所有内容,这将非常耗时/带宽,因为这是一个 cronjob,需要运行多次。其他方法是编写一个 bash 脚本,例如:

wget -k -p http://www.example.com/content/content.php?id{{x}}

假设它是一个 bash 脚本,我如何将一个变量与 wget 一起下载所有“id”的页面(可能使用 for 循环?)?

最佳答案

因为有一个索引,理想情况下您可以让 wget 跟踪索引中的链接,但只过滤您想要的 URL,而不是搜索整个站点。 curl 无法解析 HTML 并跟踪其中的链接,但 wget 可以。

wget 有 -A/-R accept/reject glob expressions , 或 --accept-regex/--reject-regex.

wget -p -k --recursive --level=1 -A '*/content.php?id=*'  http://www.example.com/content/index.php

根据需要调整接受模式以避免抓取整个网站,但仍包括您想要的内容。 wget 对 html 与其他文件类型使用接受/拒绝规则的方式有些复杂,请参阅文档(我链接了它。向下滚动到接受/拒绝模式部分的底部)。


暴力获取的最简单方法是使用 curl 而不是 wget,因为它具有范围表达式。它还将为多个请求重用相同的 HTTP 连接,而不是为每个请求都使用新的 TCP 连接来攻击服务器。 (wget 默认也使用 HTTP keep-alive,但显然只有当您在其命令行上放置多个 URL 时它才有效,而不是为每个 URL 单独运行它)。

curl -L --remote-name-all --compressed --remote-time --fail 'http://www.example.com/content/content.php?id=[00-9999]'

请注意带有范围表达式的 URL 周围的单引号,因为您需要 curl 才能看到它,而不是让 bash 将其视为 glob 或大括号表达式。

  • --remote-name-all:使用基于远程名称的文件名保存文件,而不是标准输出。较旧的 curl 过去常常要求在 cmdline 上给定的每个 url 模式都有一个 -O

  • -L:跟随重定向(--location)。

  • --fail:在服务器错误(如 404)时静默失败,而不是保存 ErrorDocument。

  • --compressed:允许gzip传输编码。

  • --remote-time:根据远程mod时间设置本地文件时间戳。

测试了一下我是否做对了,看起来不错:

$ curl -L --remote-name-all --compressed --remote-time --fail 'http://www.example.com/content/content.php?id=[00-9999]'

[1/10000]: http://www.example.com/content/content.php?id=00 --> content.php?id=00
--_curl_--http://www.example.com/content/content.php?id=00
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (22) The requested URL returned error: 404 Not Found

[2/10000]: http://www.example.com/content/content.php?id=01 --> content.php?id=01
--_curl_--http://www.example.com/content/content.php?id=01
curl: (22) The requested URL returned error: 404 Not Found

[3/10000]: http://www.example.com/content/content.php?id=02 --> content.php?id=02

...

[100/10000]: http://www.example.com/content/content.php?id=99 --> content.php?id=99
--_curl_--http://www.example.com/content/content.php?id=99
curl: (22) The requested URL returned error: 404 Not Found

[101/10000]: http://www.example.com/content/content.php?id=100 --> content.php?id=100
--_curl_--http://www.example.com/content/content.php?id=100
curl: (22) The requested URL returned error: 404 Not Found

...

关于bash - 使用 bash 使用 wget 下载特定网站文件夹的所有网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33714212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com