【问题标题】:Tweepy (Twitter API) Not Returning all Search ResultsTweepy (Twitter API) 不返回所有搜索结果
【发布时间】:2013-06-26 15:17:13
【问题描述】:

我正在使用 Twitter 的 Tweepy 搜索功能,由于某种原因,搜索结果限制为 15 个。这是我的代码

results=api.search(q="Football",rpp=1000)

for result in results:
    print "%s" %(clNormalizeString(result.text))

print len(results)

只返回 15 个结果。是不是跟不同的结果页面有关系?

【问题讨论】:

  • 貌似有一个count参数控制结果的个数,但是有没有办法只显示所有的结果?
  • 我通过使用参数'count'而不是'rpp'得到默认负载(15)

标签: python search twitter tweepy


【解决方案1】:

问题更多是关于 Twitter API 而不是 tweepy 本身。

根据documentation、count参数定义:

每页返回的推文数量,最多 100 条。 默认为 15。这以前是旧版本中的“rpp”参数 搜索 API。

仅供参考,您可以使用tweepy.Cursor 获得分页结果,如下所示:

import tweepy


auth = tweepy.OAuthHandler(..., ...)
auth.set_access_token(..., ...)

api = tweepy.API(auth)
for tweet in tweepy.Cursor(api.search,
                           q="google",
                           count=100,
                           result_type="recent",
                           include_entities=True,
                           lang="en").items():
    print tweet.created_at, tweet.text

另请参阅:https://github.com/tweepy/tweepy/issues/197。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    这是一个最小的工作示例(一旦您将假密钥替换为真实密钥)。

    import tweepy
    from math import ceil
    
    def get_authorization():
    
        info = {"consumer_key": "A7055154EEFAKE31BD4E4F3B01F679",
                "consumer_secret": "C8578274816FAEBEB3B5054447B6046F34B41F52",
                "access_token": "15225728-3TtzidHIj6HCLBsaKX7fNpuEUGWHHmQJGeF",
                "access_secret": "61E3D5BD2E1341FFD235DF58B9E2FC2C22BADAD0"}
    
        auth = tweepy.OAuthHandler(info['consumer_key'], info['consumer_secret'])
        auth.set_access_token(info['access_token'], info['access_secret'])
        return auth
    
    
    def get_tweets(query, n):
        _max_queries = 100  # arbitrarily chosen value
        api = tweepy.API(get_authorization())
    
        tweets = tweet_batch = api.search(q=query, count=n)
        ct = 1
        while len(tweets) < n and ct < _max_queries:
            print(len(tweets))
            tweet_batch = api.search(q=query, 
                                     count=n - len(tweets),
                                     max_id=tweet_batch.max_id)
            tweets.extend(tweet_batch)
            ct += 1
        return tweets
    

    注意:我确实尝试过使用 for 循环,但 twitter api 有时返回的结果少于 100 个(尽管被要求提供 100 个,而 100 个可用)。我不知道为什么会这样,但这就是为什么我没有在 tweet_batch 为空的情况下添加一个检查来打破循环的原因——你可能想自己添加这样一个检查,因为有一个 query rate limit。

    另一个注意事项:您可以通过像这样调用wait_on_rate_limit=True 来避免达到速率限制

            api = tweepy.API(get_authorization(), wait_on_rate_limit=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2013-08-15
      • 2023-01-17
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多