如何使用tweepy获取完整推文而非截断带短链内容(添加tweet_mode='extended'报错)
Tweepy 获取非截断完整推文的实操方案
报错根因
在api.search参数中添加tweet_mode='extended'的操作本身不存在错误,触发AttributeError: 'Status' object has no attribute 'text'的核心原因是:启用extended模式后,Tweepy返回的Status对象会移除原有的text截断属性,将完整文本转移到专属字段存储,原有代码中直接读取tweet.text的逻辑,会因目标属性不存在触发报错。
修正操作
- 在
api.search接口中显式传入tweet_mode='extended'参数,强制Twitter接口返回最长280字的完整推文,替代默认的截断版+短链格式 - 替换原有读取
tweet.text的逻辑,分场景读取对应字段:- 普通原创推文:完整文本存储在
tweet.full_text字段 - 转推类推文:完整原推文文本存储在
tweet.retweeted_status.full_text字段,直接读取顶层full_text只会拿到带"RT @xxx:"前缀的截断内容
- 普通原创推文:完整文本存储在
- 沿用原有@提及正则清洗、文件写入、列表存储的业务逻辑即可
可直接复用的修正后代码
fetched_tweets = api.search(q, lang='en', count=count, tweet_mode='extended') for tweet in fetched_tweets: parsed_tweet = {} # 分场景兼容普通推文、转推的全量文本获取 if hasattr(tweet, 'retweeted_status'): full_tweet_text = tweet.retweeted_status.full_text else: full_tweet_text = tweet.full_text parsed_tweet['text'] = full_tweet_text line = re.sub('@[\w]+', '', full_tweet_text) target.write(line+"\n") target.write("--------------------------------------------------------------\n") tweets.append(line)
实际效果
修改完成后,之前被截断、搭配短链返回的推文(例如仅展示"ADAM ARON CONFIRMED IF WE VOTE YES ON THE 500M...GIVE TH…"搭配t.co短链的内容),会完整返回包含全部正文、话题标签、自定义标记的全量内容,不会出现省略号截断的情况。
内容的提问来源于stack exchange,提问作者ZisIzHell
相关产品推荐
相关产品推荐

