遇到Urllib 404错误时如何继续处理其他链接?
处理图片下载时的HTTP错误并继续执行
你可以通过异常捕获机制让程序在遇到404等HTTP错误时跳过无效链接,继续处理后续内容。核心思路是用try-except块包裹可能抛出错误的代码,捕获对应的异常后记录错误信息,不终止程序运行。
原问题代码
import pandas as pd import urllib.request import urllib.error opener = urllib.request.build_opener() def url_to_jpg (i,url,file_path) : filename="image-{}".format(i) full_path = "{}{}".format(file_path, filename) opener.addheaders = [('User-Agent', 'Chrome/5.0')] urllib.request.install_opener(opener) urllib.request.urlretrieve(url,full_path) print ("{} Saved".format(filename)) return None filename="listado.csv" file_path="/Users/marcelomorelli/Downloads/tapas/imagenes" urls=pd.read_csv(filename) for i, url in enumerate(urls.values): url_to_jpg (i,url[0],file_path)
修改后的代码(加入异常处理)
import pandas as pd import urllib.request import urllib.error # 全局设置opener,无需每次调用函数都重复安装 opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Chrome/5.0')] urllib.request.install_opener(opener) def url_to_jpg(i, url, file_path): filename = f"image-{i}" full_path = f"{file_path}/{filename}" # 加入路径分隔符,避免拼接错误 try: urllib.request.urlretrieve(url, full_path) print(f"{filename} Saved") except urllib.error.HTTPError as e: print(f"下载 {filename} 失败: HTTP错误 {e.code} - {e.reason}") except urllib.error.URLError as e: print(f"下载 {filename} 失败: 链接错误 - {e.reason}") except Exception as e: print(f"下载 {filename} 失败: 未知错误 - {str(e)}") return None filename = "listado.csv" file_path = "/Users/marcelomorelli/Downloads/tapas/imagenes" urls = pd.read_csv(filename) for i, url in enumerate(urls.values): url_to_jpg(i, url[0], file_path)
关键说明
try-except块:将urlretrieve下载操作放入try代码段,触发HTTP错误(如404)时会被urllib.error.HTTPError捕获,打印错误信息后直接跳过当前链接,继续执行下一次循环。- 多异常捕获:额外处理
URLError以覆盖DNS解析失败、网络中断等非HTTP状态码的链接问题,通用Exception捕获其他未知错误。 - 优化opener设置:原代码每次调用函数都重复安装opener,修改后仅全局设置一次,提升运行效率。
- 路径拼接优化:在文件路径中加入
/,避免因原路径末尾无分隔符导致的路径拼接错误。
内容的提问来源于stack exchange,提问作者marcos9718
相关产品推荐
相关产品推荐

