Python爬取Pastebin内容存TXT时遇UnicodeEncodeError求助
编码报错与代码缺陷修复
报错根因
你遇到的 UnicodeEncodeError 本质是打开本地输出文件时未显式指定编码:Windows 环境下 Python 的默认文件编码会跟随系统区域设置,当前堆栈显示你的环境使用了 cp1252 编码,这种字符集不支持 \u2694(特殊符号⚔)这类扩展字符,写入时就会触发编码失败。
除了这个直接报错的点,原代码还有两个容易忽略的隐患:
x.close方法没有加括号,实际没有执行关闭操作,会导致文件句柄泄漏、写入内容未刷新到磁盘- 使用
a+模式打开输出文件时,重复运行脚本会把相同内容重复追加到文件末尾
修复后的完整代码
import requests # 用with管理链接读取流程,自动关闭文件 with open("file.txt", "r", encoding="utf-8") as f: # 跳过链接文件里的空行,避免无效请求 link_list = [line.rstrip("\n") for line in f if line.strip()] for line in link_list: link = line.rstrip("\n") # 转换为raw格式链接 n_link = link.replace("https://pastebin.com/", "https://pastebin.com/raw/") pastebin_id = n_link.replace("https://pastebin.com/raw/", "") # 加通用请求头,避免被目标站点拦截默认的Python请求 req_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" } r = requests.get(n_link, timeout=3, headers=req_headers) # 强制指定响应编码为UTF-8,避免requests自动识别编码出错 r.encoding = "utf-8" # 打开输出文件时显式指定UTF-8编码,用with自动管理文件关闭 with open(f"{pastebin_id}.txt", "w", encoding="utf-8") as out_file: out_file.write(r.text)
改动说明
- 所有文件读写操作都用
with上下文管理器包裹,不需要手动调用close,程序执行完会自动释放文件资源,避免手动关文件漏写、写错的问题 - 写入文件时显式添加
encoding="utf-8"参数,彻底解决特殊字符无法编码的报错 - 给请求添加通用浏览器UA头,避免被Pastebin拦截默认的python-requests客户端
- 强制指定响应编码为UTF-8,避免requests根据响应头猜编码不准导致的中文、特殊字符乱码
- 把文件打开模式从
a+调整为w,每次运行都会覆盖旧文件,避免重复写入相同内容;如果需要追加写入,把模式改成a即可 - 增加空行判断,跳过链接文件里的空行,减少无效请求
内容的提问来源于stack exchange,提问作者Spinicle
相关产品推荐
相关产品推荐

