访问不可直接访问的 Web 目录中的项目

访问不可直接访问的 Web 目录中的项目

例如,我想下载美国各州树木的图片。我在以下位置找到了阿拉巴马州的长叶松:

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,并按照提示进行操作。

相关内容