如何解决我使用的是Tweepy,但是一则推文就卡住了它会一直停留在一条特定的推文上并重复此过程
我正在使用Tweepy收集推文。我有500个Tweet ID,并尝试从每个tweet_id中收集3200个最近的Tweet。下面是我的代码。但是问题是它不会动,而是停留在我尝试收集的某条推特上。在我的终端上,它不断地向我显示
''' 在1117195540448432127之前获取推文 ...到目前为止已下载1545条推文 在1117195540448432127之前获取推文 ...到目前为止已下载1545条推文 在1117195540448432127之前获取推文 已达到速率限制。睡觉:600 在1117195540448432127之前获取推文 ...到目前为止已下载1545条推文 在1117195540448432127之前获取推文 ...到目前为止已下载1545条推文 在1117195540448432127之前获取推文 ...到目前为止已下载1545条推文 在1117195540448432127之前获取推文 ...到目前为止已下载1545条推文 在1117195540448432127之前获取推文 ...到目前为止已下载1545条推文 在1117195540448432127之前收到推文 ...到目前为止已下载1545条推文 在1117195540448432127之前获取推文 已达到速率限制。睡觉:644 ''' 所以我认为当我尝试从用户处收集推文时,一定会发生异常:半裸..?但是我真的不知道该如何处理...有人可以帮我吗?
代码:
import tweepy
import csv
def get_all_tweets(screen_name):
consumer_key = *
consumer_secret = *
access_key = *
access_secret = *
#authorize twitter,initialize tweepy
auth = tweepy.OAuthHandler(consumer_key,consumer_secret)
auth.set_access_token(access_key,access_secret)
api = tweepy.API(auth,wait_on_rate_limit=True,wait_on_rate_limit_notify=True)
#initialize a list to hold all the tweepy Tweets & list with no retweets
alltweets = []
noRT = []
#make initial request for most recent tweets with extended mode enabled to get full tweets
new_tweets = api.user_timeline(screen_name = screen_name,tweet_mode = 'extended',count=200,include_retweets=False)
#save most recent tweets
alltweets.extend(new_tweets)
#save the id of the oldest tweet less one
oldest = alltweets[-1].id - 1
#keep grabbing tweets until the api limit is reached
while len(alltweets) <= 3200:
print("getting tweets before {}".format(oldest))
#all subsiquent requests use the max_id param to prevent duplicates
new_tweets = api.user_timeline(screen_name = screen_name,max_id=oldest,include_retweets=False)
#save most recent tweets
alltweets.extend(new_tweets)
#update the id of the oldest tweet less one
oldest = alltweets[-1].id - 1
print("...{} tweets downloaded so far".format(len(alltweets)))
#removes retweets
for tweet in alltweets:
if 'RT' in tweet.full_text:
continue
else:
noRT.append([tweet.id_str,tweet.created_at,tweet.full_text.encode("utf-8")])
#,tweet.user,tweet.coordinates,tweet.place
#write to csv
with open('{}_tweets.csv'.format(screen_name),'w') as f:
writer = csv.writer(f)
writer.writerow(["id","created_at","text"])
writer.writerows(noRT)
print('{}_tweets.csv was successfully created.'.format(screen_name))
pass
if __name__ == '__main__':
#pass in the username of the account you want to download
usernames = ["halfbare","Huw_Merlin"]
#"Fla_Medic","GertvanderHoek",for x in usernames:
get_all_tweets(x)
解决方法
此问题仅出现在列表中的用户“ halfbare”上。这是因为该用户发的推文少于3200条。 您可以使用以下方法进行检查:
user = api.get_user("halfbare")
statuses_count = user.statuses_count
收集完所有用户的推文后,while循环中的len(alltweets)不再增加(因为不再为该用户添加任何推文),因此while条件始终为true。 在检索new_tweets之后,应该在while循环中添加一个中断条件:
if len(new_tweets) == 0:
break
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。