如何将URLError/HTTPError信息写入CSV文件的错误报告列?
解决方法:将错误信息写入CSV的Error Report列
以下是修改后的完整代码,能实现你需要的功能:
import bs4 from urllib.request import urlopen from urllib.error import HTTPError, URLError import csv def getTitle(soup): title_tag = soup.find('title') return title_tag.text.strip() if title_tag else '无标题' urlList = ["https://stackoverflow.com", "https://invalid-url-example.com", "https://example.com"] with open('output.csv', 'w', newline='', encoding='utf-8') as f_output: csv_output = csv.writer(f_output) csv_output.writerow(['Title', 'Error Report']) for url in urlList: error_report = '' title = '' try: html = urlopen(url) soup = bs4.BeautifulSoup(html.read(), 'html.parser') title = getTitle(soup) except HTTPError as e: error_report = f"HTML Error: {e}" except URLError as e: error_report = f"URL Error: {e}" except Exception as e: error_report = f"其他错误: {e}" csv_output.writerow([title, error_report])
关键修改说明:
- 修复表头语法错误:原代码中
Error Report未加引号,会被当作变量名触发报错,改为字符串格式'Error Report'。 - 统一行写入逻辑:每个URL循环开始时初始化
error_report和title,无论请求成功或失败,最后都会写入一行数据,确保CSV中每个URL都有对应的记录。 - 错误信息优化:捕获异常时保留具体错误描述(比如HTTP状态码、域名解析失败原因),比单纯的"HTML Error"更具排查价值。
- 标题容错处理:修改
getTitle函数,先检查title标签是否存在,避免因页面结构异常导致的程序崩溃。 - 编码设置:打开文件时指定
encoding='utf-8',防止中文或特殊字符写入CSV时出现乱码。
内容的提问来源于stack exchange,提问作者0range
相关产品推荐
相关产品推荐

