【问题标题】:Why are my tweet search requests only retrieving 200 tweets every time?为什么我的推文搜索请求每次只能检索 200 条推文?
【发布时间】:2021-07-09 09:28:08
【问题描述】:

我有一个脚本,它根据关键字查询返回推文,然后将其附加到 CSV。我看不出为什么在我的脚本中,每次运行它只会返回 200 条推文。这不是count 参数,因为据我所知,这会返回每页返回的推文数,最多为 100。

谁能看到发生了什么?

def twitter_search(twitter_api, q, max_results = 3000, **kw):
    search_results = twitter_api.search.tweets(q=q, count = 100, **kw, lang = 'en', tweet_mode='extended', )
    
    statuses = search_results['statuses']
    
    #Iterate through batches of results until we get the number we want
    #Enforce a reasonable limit
    
    max_results = min(5000, max_results)
    
    for _ in range(100):
        try:
            next_results = search_results['search_metadata']['next_results']
        except KeyError as e: #no more results when next_results doesn't exist
            break
    
    #create a dictionary from next_results
        kwargs = dict([kv.split('=') for kv in next_results[1:].split("&")])
    
        search_results = twitter_api.search.tweets(**kwargs)
        statuses += search_results['statuses']
    
        if len(statuses) > max_results:
            break
    
    return statuses

我认为这与光标迭代下一批结果有关,但我不知道为什么会这样......

【问题讨论】:

标签: python pandas twitter


【解决方案1】:

Api 仅返回每个用户的几个请求。 这可能是您没有收到所有推文的原因。

您可以在Twitter-api 阅读有关此内容的信息(请参阅资源信息部分)

您也可以尝试阅读 Proxycrawler API 以获取比当前更多的推文。

【讨论】:

    【解决方案2】:

    请参阅标准搜索运算符页面以获取可用过滤器运算符的列表,以了解如何有效地使用 Twitter 搜索。有关如何按自 id 和最大 id 导航结果的更多信息,请参阅使用时间线页面。

    链接:https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/api-reference/get-search-tweets

    【讨论】:

    • 感谢您的回答,新贡献者。如果您有答案,除了提供主要信息来源的参考之外,请随时在此处分享。
    【解决方案3】:

    Twitter 的 API 很可能不会返回每个请求。您可以在此处使用 PushShift API:
    https://pushshift.io/twitter-user-search/

    【讨论】:

      【解决方案4】:

      Twitter API 在给定时间段内对每次调用有限制。您可以设计一种功能,即您可以等待达到限制并使用光标从一个页面移动到另一个页面。

      import tweepy
      
      auth = tweepy.OAuthHandler(API_KEY, API_KEY_SECRET)
      auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
      
      twitter_api = tweepy.API(auth)
      
      def twitter_search(twitter_api, q, pages = 50 , **kwargs):
      
          return [page for page in tweepy.Cursor(twitter_api.search,
                                               q=q,
                                               wait_on_rate_limit=True, 
                                               **kwargs
                  ).pages(pages)]
      
      

      这将使用光标获取下一页并等待速率限制。

      【讨论】:

        猜你喜欢
        • 2012-02-07
        • 1970-01-01
        • 2012-11-28
        • 2014-10-31
        • 1970-01-01
        • 2013-02-28
        • 2015-12-10
        • 1970-01-01
        • 2020-09-24
        相关资源
        最近更新 更多