首页 > 解决方案 > 从用户的时间线中提取推文的功能是循环一个

问题描述

当我运行该函数时,该函数会返回大约 200 条推文,然后循环,直到达到用户实际拥有的推文总数。因此它将重复 200 条推文,直到达到该数量。

def extract_tweets(userid):
    tweets = api.user_timeline(screen_name = userid, 
                                count = 200, 
                                include_rts = True, 
                                tweet_mode = 'extended')
    for info in tweets[:3]:
        print('ID: {}'.format(info.id))
        print(info.created_at)
        print(info.full_text)
        print('\n')
    all_tweets = []
    all_tweets.extend(tweets)
    oldest_id = tweets[-1].id
    tweet_num = api.get_user(userid).statuses_count
    while len(all_tweets) < tweet_num: 
        tweets = api.user_timeline(screen_name = userid, 
                                count = 200, 
                                tweet_mode = 'extended')
        if len(tweets) == 1000: 
            break 
        oldest_id = tweets[-1].id
        all_tweets.extend(tweets)
    outtweets = [[tweet.id_str,
                  tweet.created_at,
                  tweet.favorite_count,
                  tweet.retweet_count,
                  tweet.full_text.encode('utf-8').decode('utf-8')]
                for idx, tweet in enumerate(all_tweets)]
    df = DataFrame(outtweets, columns =['id', 'created_at', 'favorite_count', 'retweet_count', 'text'])
    df.to_csv('%s_tweets.csv' % userid, index = False)
    df.head(3)

标签: pythontweepy

解决方案


您的中断条件 (len(tweets) == 1000) 永远不会为真,因为最大推文返回数为 200。如果您想在收集所有用户推文时退出循环,则中断条件应为:

if len(tweets) == 0: 
            break 

推荐阅读