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里的用户数据,这也是无法获取用户字段的关键原因。
解决步骤
- 放弃
flatten(),遍历分页器返回的每一页响应,保留includes数据 - 从每一页的
includes.users中构建author_id到用户对象的字典映射,方便快速查找 - 遍历每一页的推文,通过
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
相关产品推荐
相关产品推荐

