使用Tweepy 3.6.0筛选非转推推文遇跳转异常求助
解决Tweepy 3.6.0中识别非转推推文的问题
嘿,我之前也碰到过一模一样的情况!用Tweepy 3.6.0调用api.search获取非转推推文时,总有几条奇怪的推文——明明没有retweeted_status字段,点进去却跳转到别的原推,太头疼了。给你梳理下原因和可行的解决办法:
问题根源
这种情况大概率是两个原因导致的:
- 你调用
api.search时没请求完整的推文字段,Twitter API默认返回的精简数据里,可能漏掉了转推相关的嵌套字段; - 有些推文是早期的文本式转推(不是Twitter原生的一键转推),这类推文不会生成
retweeted_status字段,但文本开头会有RT @用户名:的标识,点击后还是会跳转到原推。
具体解决步骤
1. 开启完整字段模式
Tweepy 3.6.0对应的Twitter API v1.1里,默认返回的是精简版推文数据。调用api.search时加上tweet_mode='extended'参数,就能拿到完整的推文内容,包括隐藏的转推字段:
# 替换成你的搜索关键词和参数 search_results = api.search(q="your_search_query", tweet_mode='extended')
开启这个模式后,你可以通过tweet.full_text获取完整推文内容,同时原生转推的推文会明确带有retweeted_status嵌套对象,不会再出现漏判的情况。
2. 补充文本标识检查逻辑
如果还是碰到没有retweeted_status但实际是转推的推文,那大概率是早期的文本式转推。可以写个简单的判断函数,同时检查字段和文本格式:
def is_retweet(tweet): # 先检查原生转推的字段 if hasattr(tweet, 'retweeted_status'): return True # 再检查文本开头的RT标识 tweet_text = tweet.full_text if hasattr(tweet, 'full_text') else tweet.text return tweet_text.strip().startswith('RT @')
这样就能覆盖所有转推场景了——不管是原生转推还是文本式转推,都能准确识别。
3. 验证推文ID的对应关系
你可以在代码里打印推文ID和可能的原推ID,确认哪些是漏判的转推:
for tweet in search_results: print(f"当前推文ID: {tweet.id_str}") if hasattr(tweet, 'retweeted_status'): print(f"原推文ID: {tweet.retweeted_status.id_str}") print(f"是否为转推: {is_retweet(tweet)}") print("---")
通过这个输出,你就能清楚看到那些“隐形转推”的具体情况,方便调整逻辑。
小提醒
Tweepy 3.6.0确实是比较老的版本了,如果后续有机会升级到新版本,对Twitter API的支持会更完善,转推识别的逻辑也更稳定。不过暂时没法升级的话,上面的方法完全能解决你的问题。
内容的提问来源于stack exchange,提问作者Nathan Cheval
相关产品推荐
相关产品推荐

