如何编写代码将程序变量正确存储写入CSV文件
代码问题说明
你当前的实现存在4个核心问题,会导致运行报错或输出结果不符合预期:
- 输出文件使用
mode='w'在循环内部打开:每次循环执行写入逻辑时都会清空Test1.csv的已有内容,程序运行结束后只会保留最后一个页面的爬取结果 - 写入逻辑错误:
Name是提取到的单个文本字符串,for row in Name会逐字符遍历字符串,直接将字符串传入writerow也会把每个字符拆分为独立列写入,最终CSV格式完全错乱 - 代码缩进不规范,不符合Python语法要求,运行时会直接抛出缩进错误
- 缺少异常处理,只要某个页面不存在class为
banner-title的元素,程序会直接崩溃终止,未持久化的爬取数据会丢失
正确实现代码
import csv from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException # 初始化浏览器驱动,根据你使用的浏览器类型替换对应驱动即可 driver = webdriver.Chrome() # 同时打开输入、输出文件,避免循环内反复开关文件导致的内容覆盖问题 with open('Test.csv', 'r', encoding='utf-8') as in_csv, \ open('Test1.csv', 'w', newline='', encoding='utf-8') as out_csv: csv_reader = csv.reader(in_csv) csv_writer = csv.writer(out_csv) # 跳过输入文件的表头行,同时给输出文件写入表头 next(csv_reader) csv_writer.writerow(['页面链接', 'banner标题内容']) for row in csv_reader: page_url = row[0].strip() if not page_url: continue try: driver.get(page_url) # 提取目标元素文本,去除首尾空白字符 banner_name = driver.find_element(By.CLASS_NAME, "banner-title").text.strip() # 按列写入单行数据 csv_writer.writerow([page_url, banner_name]) print(f"爬取完成:{page_url} -> {banner_name}") except NoSuchElementException: # 单条爬取失败时写入标记,不中断整体流程 csv_writer.writerow([page_url, "未找到目标元素"]) print(f"爬取异常:{page_url} 不存在banner-title元素") # 所有任务执行完毕后关闭浏览器,释放资源 driver.quit()
关键注意事项
- 打开CSV文件时统一指定
encoding='utf-8',避免中文内容出现乱码 - 写入CSV时传入
newline=''是Python csv模块的官方要求,避免Windows系统下输出文件行与行之间多出空行 writerow方法接收列表类型参数,列表内的每个元素对应CSV的一列,不会出现字符拆分问题- 爬取逻辑增加了异常捕获,单条链接爬取失败不会导致整个程序终止,所有爬取结果都会正常落盘
内容的提问来源于stack exchange,提问作者Nikhil Kashyap
相关产品推荐
相关产品推荐

