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

使用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的版本):

  1. 打开命令提示符(CMD),执行:
    chcp 65001
    
  2. 然后运行你的脚本并重定向:
    python main.py > output.txt
    

这个方法的缺点是每次打开CMD都要执行chcp 65001,如果需要永久生效,可以修改命令行的默认编码(不过不推荐,可能影响其他命令的输出)。

小提示

如果用VS Code的终端,默认已经是UTF-8编码,直接运行脚本并重定向就不会有问题,不用额外设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:48:30