【问题标题】:How to retrieve full text tweets using tweepy?如何使用 tweepy 检索全文推文?
【发布时间】:2019-03-06 13:27:24
【问题描述】:

我正在尝试从用户定义的 Twitter 个人资料中抓取推文。阅读了以前的帖子后,我了解到 Twitter JSON 有一个用于扩展推文的部分。我已将tweet_mode='extended' 添加到我的api.user_timeline 部分并将.text 更改为.full_text.

但是,我仍然收到截断的推文。我知道转推具有 full_text 属性,但我正在抓取时间线,而不是将推文与转推分开。

有没有办法普遍查询推文并检索全文版本。我在下面包含了我的代码。

screen_name_list = ['@x']

for name in screen_name_list:
    user = api.get_user(name)

    #initialize a list to hold all the tweepy Tweets
    alltweets = []  

    #make initial request for most recent tweets (200 is the maximum allowed count)
    new_tweets = api.user_timeline(screen_name = name, count = 200,tweet_mode='extended', include_rts=True)

    #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 there are no tweets left to grab
    while len(new_tweets) > 0:
      print 'getting tweets before %s' % (oldest)

        #all subsiquent requests use the max_id param to prevent duplicates
        new_tweets = api.user_timeline(screen_name = name, count=200, max_id=oldest, tweet_mode='extended')

        #save most recent tweets
        alltweets.extend(new_tweets)

        #update the id of the oldest tweet less one
        oldest = alltweets[-1].id - 1

        print "...%s tweets downloaded so far" % (len(alltweets))

    #transform the tweepy tweets into a 2D array that will populate the csv 
    outtweets = [[tweet.id_str, tweet.created_at, tweet.full_text.encode('utf-8')] for tweet in alltweets]
    tweet_time = [index[1] for index in outtweets]
    tweet_list = [index[2] for index in outtweets]

【问题讨论】:

  • 你能说明你是如何截断推文的吗?使用tweet_mode='extended',检查alltweets 中的一些推文似乎都有'truncated': False,而tweet.full_text 似乎有完整的推文内容,没有被截断。即使outtweets[0][2] 的内容与alltweets[0].full_text 的全文匹配,更多信息或您获得的结果示例也会有所帮助。
  • 我可以获取用户生成的推文全文。但是,如果用户转发一条推文,则转发的推文限制为 140 个字符,即我没有得到完整的转发。
  • 感谢您的解释,我无法重现该问题。

标签: python twitter tweepy tweets


【解决方案1】:

如果你替换

tweet.full_text

tweet.retweeted_status.full_text if tweet.full_text.startswith("RT @") else tweet.full_text

您将获得转推的全文,尽管前面没有“RT”,因此您可能还想在 CSV 中添加另一列来指示转推,例如:

[1 if tweet.full_text.startswith("RT @") else 0] for tweet in alltweets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 2015-06-17
    • 2020-03-30
    • 2018-05-05
    • 2019-05-06
    • 2019-02-25
    • 2016-11-17
    • 2013-11-11
    相关资源
    最近更新 更多