使用snscrape爬取Twitter推文时非英文字符编码异常的解决方案咨询
解决Windows下snscrape爬取Twitter非英文字符保存乱码/字节串问题
你的问题核心是Windows系统的默认编码和UTF-8不匹配导致的:命令行默认用GBK/GB2312这类编码,直接重定向UTF-8的推文内容会触发编码错误;而手动encode('utf-8')后输出的是字节对象,自然会显示成b'xxx'的字节串格式。下面给你三个实用的解决方案:
方案1:直接在Python代码中写入UTF-8文件(最推荐)
跳过命令行重定向,直接在代码里打开一个UTF-8编码的文件,把推文内容写入进去,彻底绕开命令行的编码限制。
import snscrape.modules.twitter as sntwitter maxTweets = 10 # 记得定义你的maxTweets变量 tweets_list1 = [] # 用utf-8编码打开输出文件 with open('output.txt', 'w', encoding='utf-8', newline='') as f: for i, tweet in enumerate(sntwitter.TwitterSearchScraper('from:eenadulivenews').get_items()): if i > maxTweets: break print(tweet.content) # 控制台可能还是乱码(Windows命令行默认编码问题),但文件里是对的 f.write(tweet.content + '\n') # 写入推文,加换行分隔
运行这个脚本后,直接打开output.txt(用记事本或VS Code等支持UTF-8的编辑器)就能看到正确的非英文字符。
方案2:修改Python标准输出为UTF-8
如果你还是想用命令行重定向,可以在代码开头强制把Python的标准输出编码改成UTF-8,这样print的内容会以UTF-8输出,命令行重定向就能正确保存。
import sys import snscrape.modules.twitter as sntwitter # 重新配置标准输出为UTF-8编码 sys.stdout.reconfigure(encoding='utf-8') maxTweets = 10 tweets_list1 = [] for i, tweet in enumerate(sntwitter.TwitterSearchScraper('from:eenadulivenews').get_items()): if i > maxTweets: break print(tweet.content)
然后在命令行执行:
python main.py > output.txt
这样生成的output.txt就是UTF-8编码的,非英文字符正常显示。
方案3:临时切换Windows命令行编码为UTF-8
不用修改代码,先把命令行的编码切换成UTF-8(代码页65001),再运行你的原始脚本(没加encode的版本):
- 打开命令提示符(CMD),执行:
chcp 65001 - 然后运行你的脚本并重定向:
python main.py > output.txt
这个方法的缺点是每次打开CMD都要执行chcp 65001,如果需要永久生效,可以修改命令行的默认编码(不过不推荐,可能影响其他命令的输出)。
小提示
如果用VS Code的终端,默认已经是UTF-8编码,直接运行脚本并重定向就不会有问题,不用额外设置。
内容的提问来源于stack exchange,提问作者yawwml
相关产品推荐
相关产品推荐

