You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫存储CSV仅写入单行,如何实现多行数据写入?

解决CSV仅写入单行数据的问题

你的核心问题是写入CSV行的代码在循环外部,循环里仅生成了最后一次迭代的data,最终只写入这一行数据。以下是具体修复方案:

问题根源

当前代码中,writer.writerow(data)是在for lis in lists:循环结束后执行的,所以只会把循环最后一次生成的data写入CSV文件,自然只有单行数据。

修正步骤与完整代码

  1. 将writer.writerow(data)移动到for循环内部,确保每遍历到一个lis就写入对应行的数据。
  2. 改用with语句管理文件,自动处理文件的打开/关闭,避免手动close()可能出现的异常。
  3. 修正图片链接的提取逻辑:原代码中lis.find('span', class_="https://thecryptobasic.com")写法错误,class_参数用于匹配类名而非网址,需提取图片标签的src属性(假设目标图片在<img>标签中)。

修复后的代码:

import csv
from bs4 import BeautifulSoup  # 假设你使用BeautifulSoup解析HTML

# 假设lists是你解析得到的目标列表(如soup.find_all('li'))
header = ['标题', '标签', '时间', '地址', '图片链接']  # 替换为你的实际表头

# 使用with语句自动管理文件生命周期
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # 先写入表头
    writer.writerow(header)
    
    for lis in lists:
        title = lis.find('a', class_="title").text.strip()  # 去除文本多余空白
        tag = lis.find('span', class_="etc-mark").text.strip()
        datetime = lis.find('span', class_="datetime").text.strip()
        address = lis.find('div', class_="middle-xs").text.strip()
        # 修正图片链接提取:处理图片不存在的情况避免报错
        img_tag = lis.find('img')
        img = img_tag['src'] if img_tag else '无图片'
        
        data = [title, tag, datetime, address, img]
        print(data)
        # 每次循环写入当前行数据
        writer.writerow(data)

额外优化提示

  • 添加encoding='utf-8'避免中文乱码问题。
  • newline=''是csv模块官方推荐写法,可避免Windows系统下生成的CSV出现空行。
  • 用strip()清理文本中的换行、空格,让CSV数据更整洁。
  • 增加图片标签不存在的判断逻辑,防止代码因缺失元素报错。

内容的提问来源于stack exchange,提问作者Abdul Rehman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:55:27