用Python wget一次下载多个文件

7

寻找一个干净的Python Wget解决方案,可以同时下载多个文件。

URL将始终相同:

https://example.com/

到目前为止,我可以做到这些:

import wget

print('Beginning file download with wget module')
url = 'https://example.com/new_folder/1.jpg'
wget.download(url)

但是我还需要下载-2.jpg,-3.jpg,-4.jpg,-5.jpg,并将NWZV1WB重命名为类似于NEWCODE-1.jpg的东西,NEWCODE-2.jpg......


另外,我需要下载文件夹中的所有内容(22).jpg文件,并将文件夹在本地重命名为类似于NEWCODE的东西,但保留文件的原始名称。

这里URL始终相同:

import wget

print('Beginning file download with wget module')
url = 'https://example.com/big/1.jpg' #there's 18 jpg inside
wget.download(url)

什么更好,wget(找不到太多文章)还是requests?非常感谢您的帮助。
1个回答

3

例如:

import wget
import os
import multiprocessing

def run_process(url, output_path):
    wget.download(url, out=output_path)
    # TODO: you can write your rename logic at here using os.rename


if __name__ == '__main__':
    cpus = multiprocessing.cpu_count()
    max_pool_size = 4
    pool = multiprocessing.Pool(cpus if cpus < max_pool_size else max_pool_size)
    base_dir = os.path.dirname(os.path.abspath(__file__))
    target = "NEWCODE"
    prefix_list = ["NWZV1WB", "AWU3JAD", "NW96MRD"]
    download_list = []
    name_list = list(range(1, 23))
    name_list.extend(["zoom_side", "zoom_sole", "zoom_side-thumb"])
    for prefix in prefix_list:
        path = os.path.join(base_dir, prefix)
        if not os.path.exists(path):
            os.mkdir(path)
        if not os.path.isdir(path):
            exit()
        for name in name_list:
            download_list.append(['https://img2.tennis-warehouse.com/360/{p}/{n}.jpg'.format(n=name, p=prefix), path])

    for url, path in download_list: # change here to download other files
        print('Beginning file download with wget module {n}'.format(n=url))
        pool.apply_async(run_process, args=(url, path, ))
    # add your code here to download other files
    pool.close()
    pool.join()
    print("finish")

1
我阅读了这里的wget Python代码,似乎忘记发送output_file。这是第一个问题。 - Henry
1
至于第二个问题,这只是一个例子,您可以简单地改变for的逻辑,或者只需制作包含所需网址的list并遍历它即可。 - Henry
1
pool.close() 之前,只需为 pool.apply_async(run_process, args=(url, path, )) 提供不同的 URL 即可。 - Henry
第一个问题工作得很完美,而且似乎有点更快!太好了!但是第二个和第三个问题...我迷失了...必须承认...如果您可以更新代码,我将不胜感激 :( 我是新手。 - Andie31
我猜快成功了...但是在第25行出现了这个错误:AttributeError: 'range' object has no attribute 'extend'。 :( - Andie31
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接