使用Tweepy 3.9.0将Twitter数据导入MongoDB时遇TypeError报错求助
解决Tweepy 3.9.0中StreamListener初始化的TypeError问题
错误原因
你代码里的核心问题是流对象创建逻辑错误:
tweepy.StreamListener是自定义监听逻辑的基类,不能直接用来创建流实例,正确的流类是tweepy.Stream- 初始化流时,auth参数应该传入配置好的
tweepy.OAuthHandler对象,而非tweepy.API实例
修正后的完整代码
import tweepy import pymongo from pymongo import MongoClient # MongoDB连接部分(保持不变) client = MongoClient(mongod_connect) db = client.Data_Extractfrom_Twitter tweets = db.Tweets_Collections tweets.create_index([("id", pymongo.ASCENDING)], unique=True) # 认证部分(简化,不需要创建API对象) stream_auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) stream_auth.set_access_token(OAUTH_TOKEN, OATH_TOKEN_SECRET) track = ['Presidential Election with Donald Trump and Joe Biden'] # 自定义监听类(保持不变) class MyStreamListener(tweepy.StreamListener): def on_status(self, status): print(status.id_str) try: tweets.insert_one(status._json) # 优化:捕获具体的重复键异常,避免吞掉其他错误 except pymongo.errors.DuplicateKeyError: pass def on_error(self, status_code): if status_code == 420: # 返回False断开流连接(应对限流) return False # 修正流实例创建逻辑 myStreamListener = MyStreamListener() # 用tweepy.Stream创建实例,传入auth和listener参数 myStream = tweepy.Stream(auth=stream_auth, listener=myStreamListener) myStream.filter(track=track)
关键修正点
- 替换流类:将
tweepy.StreamListener改为tweepy.Stream来创建流实例 - 修正auth参数:直接传入
stream_auth(OAuthHandler对象),无需先创建tweepy.API(如果仅使用流功能,该API对象可以删除) - 异常捕获优化:把宽泛的
except:改为捕获pymongo.errors.DuplicateKeyError,因为你已经给id字段设置了唯一索引,大部分插入失败是因为重复推文ID,这样能避免隐藏其他未知错误
内容的提问来源于stack exchange,提问作者Yarrarapu Jashwanth
相关产品推荐
相关产品推荐

