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

使用Twitter API v2抓取推文时如何添加用户名、转发计数?

Twitter API v2 抓取推文至DataFrame:添加用户名、转发计数等字段的问题解决

问题分析

你当前代码的核心问题有两个:

  • 用户数据(用户名等)并不存储在单个tweet对象中,而是返回在response.includes['users']集合里,直接调用tweet.users会报错
  • 转发计数的获取方式错误,public_metrics是tweet的属性,无需通过tweet.data访问

解决方案

步骤1:收集推文时同步保存用户数据

在循环请求批次数据时,不仅要保存tweets_chunk,还要把response.includes里的用户数据收集起来,避免丢失。

步骤2:构建用户ID到用户信息的映射字典

把收集到的用户数据转换成以author_id为键的字典,方便后续通过推文的author_id快速匹配用户名。

步骤3:修正字段提取逻辑

  • 通过author_id从用户字典中获取对应的username
  • 直接通过tweet.public_metrics['retweet_count']获取转发计数

修正后的完整代码

import pandas as pd
# 假设你的client已经完成初始化

num_batches = 5  # 可根据实际需求调整批次数量
until_id = None
tweets = []
users = []  # 新增:用于存储用户数据

for _ in range(num_batches):
    response = client.search_recent_tweets(
        query='nurofen',
        max_results=100,
        until_id=until_id,
        tweet_fields=['author_id', 'created_at', 'text', 'lang', 'public_metrics'],
        user_fields=['name', 'username', 'location', 'id'],
        expansions=['author_id', 'entities.mentions.username'],
    )

    tweets_chunk = response.data
    if not tweets_chunk:
        break
    tweets.extend(tweets_chunk)
    
    # 新增:收集返回的用户数据
    if 'users' in response.includes:
        users.extend(response.includes['users'])

    until_id = tweets_chunk[-1].id

# 构建author_id到用户对象的映射字典
user_dict = {user.id: user for user in users}

# 整理数据生成DataFrame
tweet_data = []
for tweet in tweets:
    # 通过author_id匹配对应用户
    user = user_dict.get(tweet.author_id)
    username = user.username if user else None
    user_location = user.location if user else None

    tweet_data.append({
        'Author ID': tweet.author_id,
        'Tweet ID': tweet.id,
        'Language': tweet.lang,
        'Created at': tweet.created_at,
        'Text': tweet.text,
        'User Location': user_location,
        'Username': username,
        'Retweet Count': tweet.public_metrics['retweet_count'],
        'Like Count': tweet.public_metrics['like_count']  # 可选:额外添加点赞数字段
    })

nurofen_twts = pd.DataFrame(tweet_data)
print(nurofen_twts)

额外说明

  • 如果需要获取推文本身的地理位置信息,需要在tweet_fields中添加'geo',且仅当用户发布推文时开启位置权限才会返回该数据
  • 若不需要获取推文中提及的用户,可移除entities.mentions.username扩展参数,减少返回的数据量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:07:11