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

爬虫保存的CSV或TXT文件中文全是问号、方块或乱码字符,不是网页没加载完,而是Python默认编码和服务器返回编码不一致导致的字符解析失败。
检查网页真实编码格式
打开目标网页 → 右键「查看网页源代码」→ 搜索 标签 → 找到类似 或 的行。
注意:有些老网站用 【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')
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
用 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 的核心概念和高级技巧!










