例如,我想下载美国各州树木的图片。我在以下位置找到了阿拉巴马州的长叶松:
https://statesymbolsusa.org/sites/statesymbolsusa.org/files/primary-images/longleafpine.jpg
更一般地说,所有这些美国州树图像都位于:
https://statesymbolsusa.org/sites/statesymbolsusa.org/files/primary-images/
现在,如果我可以直接访问这个网络目录,我可以使用 DownloadThemAll 下载所有这些图像。但我无法直接访问该网络目录。我只收到“页面未找到”消息。
那么,我怎样才能下载全部 50 张图片来自这个网站而不用手动点击每一个 50 个州?
编辑:这只是我遇到的一般问题的一个小例子。因此,具体情况的具体解决方案(例如,转到此其他对我来说,这个可直接下载全部 50 张图片的网站实际上不起作用。
答案1
由于您无权访问目录,因此无法轻松知道其中图片的文件名。这给您带来了很多额外的工作。这意味着如果您无法获取所有文件名(设置起来不太容易/用户不友好),则需要使用可以强制执行文件的软件。使用类似的东西,您可以强制执行目录dirbuster
中文件的名称primary-images
。
但值得注意的是这是不被接受的。使用此类软件以及其他人建议的软件会给服务器带来大量额外流量,因为无论页面是否存在,您都会发送页面请求。这很容易导致您的 IP 被服务器管理员/防火墙阻止,从而减慢其他人的服务速度,或被识别为DOS 攻击如果您要发送很多内容。如果您知道自己在做什么并且有权限公开透明地发送内容,请使用。
最好的办法是单击所有这些文件,或者如果您可以获得所有文件的名称,则可以创建一个简单的.txt
文件,其中每个文件的名称都由新行分隔:
longleafpine.png
shortbarkpine.jpeg
bigtree2.png
...
您可以使用我为该函数编写的这段 Python 代码(在 GitHub 上下载):
# Create an empty folder and put only the .txt wordlist and this .py script in it.
# All the images will be saved in this directory.
import requests
import shutil
url = input('Enter URL: ')
with open(input('Enter wordlist filename: ')) as wordlist:
for line in wordlist:
line = line.strip('\n')
filepath = url+line
img = requests.get(filepath, stream=True)
if img.status_code == 200:
with open(line, 'wb') as newfile:
shutil.copyfileobj(img.raw, newfile)
print('Successfully downloaded ' + filepath)
else:
print('Failed to download ' + filepath)
以下是其运行的截图:
如果你是第一次使用 Python,请关注本指南将帮助您安装并cd
在命令提示符中使用与 Python 脚本位于同一目录中的命令。例如,如果脚本位于您的文档文件夹中,您将运行cd C:\Users\$User\Documents\
,然后运行python imgdl.py
,并按照提示进行操作。