Tweepy 未返回完整推文:tweet_mode = 'extended' 不起作用

Cea*_*lem 4 python string twitter list tweepy

您好,我正在尝试使用 tweepy 抓取某个用户的推文。这是我的代码:

tweets = []
username = 'example'
count = 140 #nb of tweets
try: 
    # Pulling individual tweets from query
    for tweet in api.user_timeline(id=username, count=count, include_rts = False):
    # Adding to list that contains all tweets
      tweets.append((tweet.text))
except BaseException as e:
      print('failed on_status,',str(e))
      time.sleep(3)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是推文未完成,末尾带有“...”。

我想我已经查看了堆栈溢出和其他地方的所有其他类似问题,但没有任何效果。大多数人并不关心我,因为我不处理转发

我尝试过将tweet_mode = 'extended'and/or tweet.full_textortweet._json['extended_tweet']['full_text']放在不同的组合中。

我没有收到错误消息,但没有任何效果,只是返回一个空列表。而且看起来文档已经过时了,因为它没有提到“tweet_mode”和“include_rts”参数: 在此输入图像描述

有人设法获得每条推文的全文吗?我真的被这个看似简单的问题困扰并且正在掉头发,所以我将不胜感激任何建议:D 提前致谢!

ane*_*oid 7

TL;DR:您很可能遇到速率限制问题。并使用该full_text属性。

\n\n

长版:

\n\n
    \n
  1. 第一的,

    \n\n
    \n

    我遇到的问题是推文未完成,末尾带有“...”。

    \n
    \n\n

    根据有关扩展推文的 Tweepy 文档,这是预期的:

    \n\n
    \n

    兼容模式

    \n\n

    ...还可以看出Status 对象的属性text被截断,因为它将带有省略号字符、空格和推文的缩短的自永久链接 URL 后缀。

    \n
  2. \n
  3. 沃特

    \n\n
    \n

    而且看起来文档已经过时了,因为它没有提到“tweet_mode”和“include_rts”参数:

    \n
    \n\n

    他们没有明确地将其添加到每个方法的文档中,但是,他们指定tweet_mode将其添加为 param

    \n\n
    \n

    标准API方法

    \n\n

    任何tweepy.API返回 Status 对象的方法都接受新tweet_mode参数。此参数的有效值为compatextended,分别给出兼容模式和扩展模式。默认模式(如果未提供参数)为兼容模式。

    \n
  4. \n
  5. 那么,如果不tweet_mode添加到通话中,您确实会收到包含部分文本的推文吗?有了它,你得到的只是一个空列表?如果您删除它并立即重试,请验证您是否仍然得到一个空列表。即,一旦获得空列表结果,请检查即使您将参数更改回有效的参数,是否仍然获得空列表。

    \n\n

    基于bug #1329 - API.user_timeline 有时返回空列表- 这似乎是速率限制问题:

    \n\n
    \n

    Harmon758于 2 月 13 日发表评论

    \n\n

    此 API 限制将表现为您所描述的问题。

    \n
  6. \n
  7. 即使它有效,它也是在full_text属性中,而不是通常的text. 所以这条线

    \n\n
    tweets.append((tweet.text))\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    应该

    \n\n
    tweets.append(tweet.full_text)\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    (并且您可以跳过额外的封闭部分()

  8. \n
\n\n
\n\n
    \n
  • 顺便说一句,如果您对转发不感兴趣,请参阅此示例以了解处理转发的正确方法:

    \n\n
    \n

    给定一个现有的tweepy.API对象和id一条推文,以下内容可用于打印推文的全文,或者如果它\xe2\x80\x99是转发推文,则打印转发推文的全文:

    \n\n
    status = api.get_status(id, tweet_mode="extended")\ntry:\n    print(status.retweeted_status.full_text)\nexcept AttributeError:  # Not a Retweet\n    print(status.full_text)\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    如果status是转发,status.full_text可能会被截断。

    \n
  • \n
\n