使用tweepy提取Twitter多特征数据时Stream初始化报错调试求助
报错原因分析
你使用的是Tweepy 4.0及以上版本,该版本对流式API做了破坏性重构:
Stream类的初始化方法不再接收auth对象和Listener实例作为参数,要求直接传入consumer_key、consumer_secret、access_token、access_token_secret四个凭证参数- 你的代码存在逻辑冗余:已经自定义
MyListener类继承了Stream类,后续又重复实例化Stream类传入auth和MyListener实例,不符合版本要求的调用规范
解决方法
提供两种适配方案,修复后原有字段提取逻辑都可以正常运行,不需要调整特征提取部分的代码:
方案1:适配当前Tweepy v4.x版本(推荐)
- 替换错误的流式实例化代码,直接实例化你自定义的
MyListener类,传入四个凭证参数即可:
原错误代码:
twitter_stream = Stream(auth, MyListener()) twitter_stream.sample()
替换为:
twitter_stream = MyListener(consumer_key, consumer_secret, access_key, access_secret) twitter_stream.sample()
- 修复其他细节问题:
- 调整
try_retweet、try_country函数前的多余缩进,和其他函数保持同级对齐,避免触发缩进错误 - 建议修改
try_get方法,取消encode('utf-8')操作,Python3下直接存储字符串即可,避免csv中出现b'xxx'格式的bytes内容 - 你预设要提取的字段存在拼写错误,比如
user_'location'、user_'time_zone',注意修正字段名避免取值错误
方案2:降级到Tweepy v3.x兼容旧写法
如果你不想调整现有代码结构,可以直接降级tweepy到3.10.0版本:
pip install tweepy==3.10.0
降级后修改MyListener的继承关系,不再继承Stream,改为继承StreamListener:
from tweepy import Stream, StreamListener class MyListener(StreamListener): # 原有回调方法保持不变
之后你原来的实例化代码twitter_stream = Stream(auth, MyListener())即可正常运行。
内容的提问来源于stack exchange,提问作者shan
相关产品推荐
相关产品推荐

