首页 > 解决方案 > Python 3 使用 urlretrive () 和嵌套循环下载 pdf

问题描述

我正在尝试使用带有 urlretrieve() 的 xlsx 文件中的链接下载 .pdf,一列包含链接,另一列包含下载文件应具有的名称。

问题是我的代码似乎只是在下载列表的每个项目时一遍又一遍地覆盖同一个文件。

from urllib.request import urlretrieve
from urllib.error import URLError, HTTPError
import os
import xlrd

workbook = xlrd.open_workbook('file.xlsx',on_demand=True)
sheet = workbook.sheet_by_name('Sheet1')
listofvalues = sheet.col_values(21, 1)
listofnames = sheet.col_values(2, 1)

for name in listofnames:
    for value in listofvalues:
        try:
            results = 'C:\\results'
            full_file_name = os.path.join(results, str(name + ".pdf"))
            urlretrieve(value, full_file_name)
            print(str(value) + ' DOWNLOADED')
        except (HTTPError, ValueError, URLError) as e:
            print("------------------------------------")
            print(e)
            print(value)
            print("-----------------------------------")

    continue

我认为这与嵌套循环有关,但我找不到解决方案。

标签: pythonnested-loopsxlrdurlretrieve

解决方案


正如评论中提到的,您的问题是对于外部循环的每次迭代,您的内部循环都将运行到完成,因此您将所有文件命名为相同。您希望同时遍历这两个列表,以便获取给定文件的 URL 和名称。

有关如何执行此操作的参考,您可以参考: 如何并行遍历两个列表?

编辑:

上述响应假定两个列表的长度相同,即每个文件都有一个 URL。如果不是这种情况,请参阅您的问题留下的评论。


推荐阅读