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

Python保存CSV时字符串逐字符存储问题的解决方法

解决Python爬虫保存BeautifulSoup内容到CSV的两个常见问题

问题1:保存标签对象到CSV,结果存的是标签本身的对象表示

直接把BeautifulSoup的Tag对象丢给CSV writer时,writer会默认调用对象的__repr__方法,最终CSV里存的是类似<p class="xxx">示例文本</p>这种对象描述,不是我们需要的文本内容。

解决办法:
提取标签里的文本,用Tag对象的.get_text()方法(推荐加strip=True去除前后空白),或者.text属性;如果需要保留完整HTML结构,就用str(tag)把标签转成字符串。


问题2:转成字符串后,CSV里的内容被逐字符拆分

这是因为CSV的writerow()方法接收的是可迭代对象(比如列表、元组),如果直接传单个字符串,字符串会被当成字符的迭代器,每个字符被拆分成单独的一列。

解决办法:
把要保存的字符串放到一个列表或元组里,比如用writerow([你的字符串]),而不是writerow(你的字符串)。


完整正确示例代码

import csv
from bs4 import BeautifulSoup
import requests

# 示例爬取目标页面
target_url = "https://example.com"
resp = requests.get(target_url)
soup = BeautifulSoup(resp.text, "html.parser")
# 获取页面中所有段落标签
paragraph_tags = soup.find_all("p")

# 写入CSV文件
with open("爬取结果.csv", "w", encoding="utf-8", newline="") as csv_file:
    csv_writer = csv.writer(csv_file)
    # 先写表头
    csv_writer.writerow(["段落内容"])
    
    for tag in paragraph_tags:
        # 提取纯文本,去除前后空白
        pure_text = tag.get_text(strip=True)
        # 把文本包装成列表,避免被拆分
        csv_writer.writerow([pure_text])
        
        # 如果需要保存完整HTML结构,替换成下面两行
        # html_content = str(tag)
        # csv_writer.writerow([html_content])

关键注意点:

  • 打开文件时加newline="",避免Windows系统下CSV出现多余空行
  • 指定encoding="utf-8",防止中文或特殊字符乱码
  • 无论存纯文本还是HTML字符串,都要包装成列表/元组再传入writerow()

内容的提问来源于stack exchange,提问作者임민서

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:25:30