Python从URL列表下载PDF失败:downloadUrl字段值为None
解决字典列表中downloadUrl为None的PDF下载问题
先确认字典键名是否正确
很多时候问题出在键名拼写/大小写错误上,比如实际键名是downloadurl(全小写)、download_url(带下划线)而非downloadUrl。直接打印每个字典的所有键来验证:for item in your_dict_list: print(item.keys())如果看不到
downloadUrl,说明你用错了键名。检查原始数据的完整性
键名没问题但值为None,大概率是你获取字典列表的环节出了问题(比如爬取时解析错误、接口返回字段为空)。打印几个完整的字典看看:# 打印前3个字典确认数据 for idx in range(3): print(f"Item {idx}: {your_dict_list[idx]}")观察除
downloadUrl外的字段是否正常,判断是数据本身缺失还是解析逻辑错误。验证目标链接的实际存在性
如果你坚信链接存在,手动去数据来源(网页/接口)中查找对应PDF的真实链接:- 若链接是相对路径,需要拼接域名(比如
base_url + relative_path) - 若链接是动态加载的,静态解析(比如BeautifulSoup直接抓)会拿不到,得用Selenium或者分析接口请求
- 若链接是相对路径,需要拼接域名(比如
调试下载代码逻辑
确保你的下载代码里正确处理了空值,示例代码如下:import requests for item in your_dict_list: pdf_url = item.get("downloadUrl") # 先判断url是否有效 if not pdf_url or not isinstance(pdf_url, str): print(f"无效链接: {pdf_url}") continue try: resp = requests.get(pdf_url, timeout=10) resp.raise_for_status() # 抛出HTTP错误 # 用字典里的其他字段命名文件,比如title filename = f"{item.get('title', 'untitled')}.pdf" with open(filename, "wb") as f: f.write(resp.content) print(f"已下载: {filename}") except Exception as e: print(f"下载失败 {pdf_url}: {str(e)}")
内容的提问来源于stack exchange,提问作者Noel Harris
相关产品推荐
相关产品推荐

