使用BeautifulSoup抓取数据后追加写入CSV文件时遇到问题
嘿,我来帮你排查这个CSV追加写入的问题!结合你提供的HTML结构(要抓取职位名称、公司信息这些数据对吧),常见的异常原因和解决办法大概有这几种:
常见异常原因及解决方案
1. 文件打开模式或编码错误
很多人追加写入时会搞错模式,比如用w(覆盖写入)而非a(追加),或者没指定编码导致乱码甚至报错。正确的打开方式应该是:
import csv # 追加模式,指定utf-8编码避免特殊字符乱码,newline=''防止Windows下出现空行 with open('jobs.csv', 'a', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) # 写入抓取到的职位、公司数据 writer.writerow([job_title, company_name])
2. 抓取的数据格式不匹配
如果抓取的字段是None(比如某个元素没找到),或者数据长度和CSV表头不一致,写入时会直接报错。建议先对数据做校验处理:
from bs4 import BeautifulSoup # 假设你已经拿到解析后的soup对象 job_title_tag = soup.find('h2', itemprop='title').a job_title = job_title_tag.get_text(strip=True) if job_title_tag else '无职位名称' company_tag = soup.find('h3', itemprop='name').a company_name = company_tag.get_text(strip=True) if company_tag else '无公司名称' # 确保数据是列表形式,且长度和表头一致 writer.writerow([job_title, company_name])
3. 特殊字符导致CSV列错位
如果抓取的内容包含逗号、引号这类CSV的特殊字符,直接写入会导致列错位。用csv.DictWriter会更稳妥,它能自动处理特殊字符:
import csv import os with open('jobs.csv', 'a', newline='', encoding='utf-8') as csvfile: fieldnames = ['职位名称', '公司名称'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # 仅当文件为空时写入表头,避免重复 if os.path.getsize('jobs.csv') == 0: writer.writeheader() writer.writerow({'职位名称': job_title, '公司名称': company_name})
4. 未捕获异常定位问题
如果还是报错,建议加上异常捕获块,快速定位具体问题:
try: with open('jobs.csv', 'a', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) writer.writerow([job_title, company_name]) except Exception as e: print(f"写入CSV时出错: {str(e)}") print(f"出错的目标数据: 职位={job_title}, 公司={company_name}")
内容的提问来源于stack exchange,提问作者pyrish
相关产品推荐
相关产品推荐

