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

如何用Python将网站爬取内容转换为CSV文件?解决‘非UTF-8编码’报错问题

解决CSV编码错误:正确保存巴西国库拍卖数据为UTF-8格式

我来帮你搞定这个编码问题!你遇到的"teste_tesouro.csv is not UTF-8 encoded"错误,本质是巴西国库网站返回的内容并非UTF-8编码(这类拉美地区的网站常用ISO-8859-1或cp1252编码),直接写入二进制内容会导致系统识别编码时异常。下面是具体的解决步骤:

问题根源拆解

你直接把response.content(二进制原始内容)写入文件,没有做编码转换,而系统默认以UTF-8规则识别文件时,就会因编码不匹配报错。网站返回的文本包含葡萄牙语特殊字符,必须先转成UTF-8编码再保存。

解决方案一:直接转码后写入文本文件

最简单的方式是先将响应内容解码为网站的原始编码(这里大概率是ISO-8859-1),再转成UTF-8字符串写入文件:

import requests
from bs4 import BeautifulSoup

# 你的爬取代码保持不变
response = requests.post('https://sisweb.tesouro.gov.br/apex/wwv_flow.accept', headers=headers, cookies=cookies, data=data)
soup = BeautifulSoup(response.content, "html.parser")

# 转码:先按网站编码解码,再转换为UTF-8格式
utf8_text = soup.text.encode('ISO-8859-1').decode('utf-8')

# 以文本模式写入,明确指定UTF-8编码
with open('teste_tesouro.csv', 'w', encoding='utf-8') as csv_file:
    csv_file.write(utf8_text)

如果不确定网站的具体编码,可以先打印响应的编码属性确认:

print(response.encoding)  # 输出类似ISO-8859-1,这就是网站使用的编码

解决方案二:用csv模块规范处理(推荐)

因为你的数据本身是分号分隔的CSV格式,用Python内置的csv模块处理能避免换行符、分隔符的潜在问题,还能灵活清洗数据(比如跳过开头的说明文字):

import csv
from io import StringIO
import requests
from bs4 import BeautifulSoup

response = requests.post('https://sisweb.tesouro.gov.br/apex/wwv_flow.accept', headers=headers, cookies=cookies, data=data)
soup = BeautifulSoup(response.content, "html.parser")

# 将文本转为可读取的IO对象
text_io = StringIO(soup.text)
# 过滤空行,提取所有有效内容行
all_lines = [line.strip() for line in text_io if line.strip()]

# 跳过前5行的说明文字(从第6行开始是CSV表头和数据)
csv_content = all_lines[5:]

# 写入规范的CSV文件
with open('teste_tesouro.csv', 'w', encoding='utf-8', newline='') as csv_file:
    # 指定分号为分隔符,匹配数据格式
    writer = csv.writer(csv_file, delimiter=';')
    for line in csv_content:
        # 按分号分割每行数据
        row_data = line.split(';')
        writer.writerow(row_data)

这样处理后,生成的CSV文件就是标准UTF-8编码,不会再出现编码错误,同时数据结构更规范,方便后续分析使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:27:28