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

如何使用Tweepy通过用户名而非screen_name获取目标用户推文

问题解决方案

api.user_timeline 接口设计上就只支持单次传入单个用户的 screen_name(即@后面的账号唯一标识),不支持直接传入用户名列表批量查询,最直接的实现方式就是遍历你的用户名列表,逐个调用接口拉取推文即可。你原有代码的逻辑方向是对的,但存在缩进错误、变量作用域问题,也缺少异常处理和限流适配,很容易运行报错或者只拿到最后一个用户的推文。

注意事项

  • 如果你列表里存的是用户的显示昵称(个人主页上展示的非唯一名称),不是@后的账号handle,需要先调用 api.search_users 接口匹配到对应用户的真实 screen_name 再拉取推文,否则会出现查错用户、查无此人的问题
  • 初始化API时加上 wait_on_rate_limit=True 参数,触发Twitter接口限流时会自动等待配额恢复,不需要手动写休眠逻辑
  • 对不存在、已封禁、设为私密的账号要加异常捕获,避免单个用户查询失败导致整个任务中断

修正后可运行代码

import configparser
import tweepy
import pandas as pd

config = configparser.ConfigParser()
config.read('config.ini')

api_key = config['twitter']['api_key']
api_key_secret = config['twitter']['api_key_secret']
access_token = config['twitter']['access_token']
access_token_secret = config['twitter']['access_token_secret']

# 鉴权,加上限流自动等待参数
auth = tweepy.OAuthHandler(api_key, api_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

# 这里替换成你的用户名列表,注意存储值为@后的账号名
users = df['Name'].tolist()
limit = 300
columns = ['User', 'Tweet']
data = []

for user in users:
    try:
        # 逐个拉取对应用户的推文
        tweets = tweepy.Cursor(
            api.user_timeline,
            screen_name=user,
            count=200,
            tweet_mode='extended'
        ).items(limit)
        
        # 将当前用户的推文写入数据集
        for tweet in tweets:
            data.append([tweet.user.screen_name, tweet.full_text])
        print(f"用户{user}的推文拉取完成")
    except Exception as e:
        print(f"拉取用户{user}的推文失败,错误信息:{str(e)}")
        continue

# 统一转换为DataFrame
df1 = pd.DataFrame(data, columns=columns)
print(df1)

如果你使用的是Twitter API v2版本,对应Tweepy v2客户端的get_users_tweets接口逻辑完全一致,同样是遍历用户ID/账号名单次调用即可,没有原生支持批量拉取不同用户时间线的接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:21:46