You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tweepy V2调用search_recent_tweets如何获取用户详情?

解决Twitter API V2获取推文用户详情的报错问题

问题原因

你遇到的AttributeError是因为Twitter API V2的扩展字段(expansions)数据不会直接内嵌到推文对象中。当你指定expansions=["author_id"]和user_fields时,用户详情会被单独放在响应的includes.users列表里,而非tweet对象的属性中,直接访问tweet.username自然找不到对应属性。

另外你使用的flatten()方法只返回推文对象,会丢弃includes里的用户数据,这也是无法获取用户字段的关键原因。

解决步骤

  1. 放弃flatten(),遍历分页器返回的每一页响应,保留includes数据
  2. 从每一页的includes.users中构建author_id到用户对象的字典映射,方便快速查找
  3. 遍历每一页的推文,通过tweet.author_id从映射中获取对应用户详情,再整合到结果里

修改后的完整代码

import pandas as pd
import tweepy

result = []
query = "something"
client = tweepy.Client(bearer_token=bearer_token)

# 遍历分页器的每一页,保留includes数据
for page in tweepy.Paginator(
    client.search_recent_tweets,
    query=query,
    tweet_fields=['id', 'referenced_tweets','text','context_annotations','created_at','geo','author_id','lang','public_metrics','source'],
    user_fields=['id','name','username','url','public_metrics'],
    expansions=["referenced_tweets.id","author_id","geo.place_id",'referenced_tweets.id.author_id'],
    max_results=10
):
    # 构建author_id到用户对象的映射
    user_map = {user.id: user for user in page.includes.get('users', [])}
    
    # 处理当前页的每条推文
    for tweet in page.data:
        # 获取当前推文对应的用户信息
        user = user_map.get(tweet.author_id)
        # 提取用户字段,处理可能的空值
        username = user.username if user else None
        user_name = user.name if user else None
        user_url = user.url if user else None
        user_followers = user.public_metrics['followers_count'] if user and 'followers_count' in user.public_metrics else None
        
        result.append({
            'id': tweet.id,
            'author_id': tweet.author_id,
            'username': username,
            'user_name': user_name,
            'user_url': user_url,
            'user_followers': user_followers,
            'lang': tweet.lang,
            'text': tweet.text,
            'created_at': tweet.created_at,
            'source': tweet.source,
            'retweets': tweet.public_metrics['retweet_count'],
            'replies': tweet.public_metrics['reply_count'],
            'likes': tweet.public_metrics['like_count'],
            'quote_count': tweet.public_metrics['quote_count'],
            'referenced_tweets': tweet.referenced_tweets,
            'context_annotations': tweet.context_annotations,
            'geo': tweet.geo,
            'tweet_url': f"https://twitter.com/{tweet.author_id}/status/{tweet.id}"
        })

df = pd.DataFrame(result)

关键说明

  • page.includes.get('users', []):安全获取当前页的用户列表,避免无用户数据时抛出错误
  • user_map字典:通过author_id快速定位用户,比遍历查找效率更高
  • 空值处理:添加if user else None的判断,避免因用户数据缺失导致报错

内容的提问来源于stack exchange,提问作者fast_crawler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:15:26