有没有一种方法可以使用请求模块下载多个文件

时间:2020-06-29 15:29:53

标签: python python-requests

我想从一个名为hdrihaven.com的网站下载多个.hdr文件。 我对python的了解不是很好,但是这是到目前为止我尝试过的:

import requests

url = 'https://hdrihaven.com/files/hdris/'
resolution = '4k'
file = 'pump_station' #would need to be every file

url_2k = url + file + '_' + resolution + '.hdr'
print(url_2k)

r = requests.get(url_2k, allow_redirects=True)
open(file + resolution + '.hdr', 'wb').write(r.content)

理想的file只会遍历目录中的每个文件。

谢谢您的回答!

编辑

我在github上找到了一个满足我需要的脚本:https://github.com/Alzy/hdrihaven_dl。我在https://github.com/ktkk/hdrihaven-downloader中对其进行了编辑以满足自己的需求。它使用注释中建议的遍历所有可用文件列表的技术。

我发现,与例如从本地下载相比,请求模块以及urllib极其慢。铬。如果有人对如何加快这些速度有想法,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以通过以下两种方式进行此操作:

  1. 您可以使用URL来获取所有文件并遍历循环以分别下载它们。当然,只有在存在这样的URL的情况下,这才起作用。

  2. 您可以将单独的URL传递给可以并行/批量下载的功能。

例如:

import os
import requests
from time import time
from multiprocessing.pool import ThreadPool

def url_response(url):
    path, url = url
    r = requests.get(url, stream = True)
    with open(path, 'wb') as f:
        for ch in r:
            f.write(ch)

urls = [("Event1", "https://www.python.org/events/python-events/805/"),("Event2", "https://www.python.org/events/python-events/801/"),
("Event3", "https://www.python.org/events/python-user-group/816/")]


start = time()

for x in urls:
    url_response (x)
print(f"Time to download: {time() - start}")

此代码段摘自此处Download multiple files (Parallel/bulk download)。在此处阅读有关如何执行此操作的更多信息。