我最初基于Yuva Raj的建议,在获取搜索/推文中使用附加参数- max_id
参数与每次循环返回的最后一条推文的id
结合使用,并检查TweepError
的出现。
然而,我发现可以使用tweepy.Cursor
更简单地解决问题(有关使用Cursor
的更多信息,请参见tweepy Cursor教程)。
以下代码获取最近的1000个提到'python'
的推文。
import tweepy
from twitter_authentication import API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
query = 'python'
max_tweets = 1000
searched_tweets = [status for status in tweepy.Cursor(api.search, q=query).items(max_tweets)]
更新:为了回应安德烈·佩特雷关于tweepy.Cursor
可能存在内存消耗问题的评论,我将包含我原来的解决方案,并将上面用于计算searched_tweets
的单语句列表推导替换为以下内容:
searched_tweets = []
last_id = -1
while len(searched_tweets) < max_tweets:
count = max_tweets - len(searched_tweets)
try:
new_tweets = api.search(q=query, count=count, max_id=str(last_id - 1))
if not new_tweets:
break
searched_tweets.extend(new_tweets)
last_id = new_tweets[-1].id
except tweepy.TweepError as e:
break