Python爬虫提取数据后写入csv文件出现问题该如何解决
爬虫写入CSV问题排查方案
- 索引越界错误排查
你当前代码直接对findAll返回的列表取[0],如果页面结构变化、对应class的元素未匹配到,会直接触发IndexError报错。推荐改用find方法直接获取首个匹配元素,匹配失败时返回None,再做容错处理:
# 原写法替换为: job_title_ele = container.find('h2', class_='css-m604qf') job_title = job_title_ele.text.strip() if job_title_ele else "未知职位" company_ele = container.find('a', class_='css-17s97q8') company = company_ele.text.strip() if company_ele else "未知企业" job_type_ele = container.find('span', class_='css-1ve4b75 eoyjyou0') job_type = job_type_ele.text.strip() if job_type_ele else "未知类型"
- CSV格式错位问题排查
手动用逗号拼接内容时,如果职位名、企业名本身包含逗号,会导致CSV列错位。禁止手动拼接CSV字符串,使用Python标准库csv模块处理格式。 - 文件操作与编码问题排查
手动调用file.close()时如果中间代码报错,会导致文件未正常关闭、数据丢失。且默认编码打开文件容易出现中文乱码,推荐用with上下文管理器打开文件,同时指定编码为utf-8-sig适配Windows Excel读取。
优化后完整实现代码
import csv # 用with上下文管理器自动处理文件关闭 with open('职位数据.csv', 'w', encoding='utf-8-sig', newline='') as f: writer = csv.writer(f) # 先写入表头 writer.writerow(['职位名称', '企业名称', '工作类型']) for container in containers: job_title_ele = container.find('h2', class_='css-m604qf') job_title = job_title_ele.text.strip() if job_title_ele else "未知职位" company_ele = container.find('a', class_='css-17s97q8') company = company_ele.text.strip() if company_ele else "未知企业" job_type_ele = container.find('span', class_='css-1ve4b75 eoyjyou0') job_type = job_type_ele.text.strip() if job_type_ele else "未知类型" # 直接传入列表,csv模块自动处理格式 writer.writerow([job_title, company, job_type])
内容的提问来源于stack exchange,提问作者Mahmoud Eldesuky
相关产品推荐
相关产品推荐

