python - 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
我认为这与嵌套循环有关,但我找不到解决方案。
解决方案
正如评论中提到的,您的问题是对于外部循环的每次迭代,您的内部循环都将运行到完成,因此您将所有文件命名为相同。您希望同时遍历这两个列表,以便获取给定文件的 URL 和名称。
有关如何执行此操作的参考,您可以参考: 如何并行遍历两个列表?
编辑:
上述响应假定两个列表的长度相同,即每个文件都有一个 URL。如果不是这种情况,请参阅您的问题留下的评论。
推荐阅读
- angular - 具有方法和属性 Angular 9 的 Jasmine 模拟提供程序
- python - 无法通过使用 python 对发件人应用过滤器来阅读 Outlook 邮件
- excel - 使用带有动态内容的 XMLHTTP 请求抓取货物编号跟踪状态
- php - 使用 AlexaCRM php-crm-toolkit 在 Dynamics 365 中使用 php 创建电子邮件
- python - 如何将二进制文件输出打印为 Base 2(以位为单位)?
- devise - 在 rails 的设备系统中再次发送电子邮件
- azure - 通过 PowerShell 获取 Azure 用户的扩展属性
- sbt - 为什么 SBT 询问用户名和密码
- google-chrome-devtools - vue3:如何删除 backend.js 控制台消息
- postgresql - PostgresSQL 无法加载库 plpython3.dll