爬虫保存csv或txt文件中文乱码,根本原因是python默认编码与网页实际编码(如gb2312、gbk、utf-8)不匹配;需通过meta标签或response headers确认真实编码,requests中优先用r.content.decode()手动解码,并写入时明确指定encoding='utf-8'或'utf-8-sig'。

爬虫保存的CSV或TXT文件中文全是问号、方块或乱码字符,不是网页没加载完,而是Python默认编码和服务器返回编码不一致导致的字符解析失败。
检查网页真实编码格式
打开目标网页 → 右键「查看网页源代码」→ 搜索 <meta> 标签 → 找到类似 <code><meta charset="UTF-8"> 或 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 的行。
注意:有些老网站用 【GB2312】 或 【GBK】,直接用 utf-8 解析会崩出 字符。
如果源码里没写 charset,就用浏览器开发者工具(F12)→ Network → 点开 HTML 请求 → 查看 Response Headers 中的 Content-Type 字段值。
requests请求时强制指定编码
方法一:获取响应后手动赋值编码再解析
r = requests.get(url) → r.encoding = 'gbk' → print(r.text)
这一步必须在调用 r.text 之前设置,否则 requests 已按错误编码缓存了解析结果,再改 encoding 也无效。
方法二:跳过自动解码,用 content 手动解码
r = requests.get(url) → html = r.content.decode('gb18030')
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
用 r.content 拿原始字节流,再显式调用 .decode(),比改 r.encoding 更可靠,尤其对 charset 声明混乱的页面。
保存文件时明确指定 encoding 参数
第一步:用 open() 写入前必须加 encoding='utf-8'
with open('data.txt', 'w', encoding='utf-8') as f: f.write(text)
第二步:如果数据含 GBK 编码内容但你要存成 UTF-8 文件,先 encode 再 decode 转换
text_gbk = r.content.decode('gbk') → text_utf8 = text_gbk.encode('latin-1').decode('utf-8', errors='ignore')
第三步:写入 CSV 时别用普通 open,改用 csv 模块并传入 encoding
import csv → with open('out.csv', 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f)
【encoding='utf-8-sig'】 能避免 Excel 打开 CSV 时首列出现“ufeff”乱码前缀。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










