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

使用Twitter API V2(基础版)爬取时遇Tweepy 453错误求助

问题分析与解决方案

错误根源

你当前的代码调用的是Twitter API v1.1的api.search端点,但你的基础版权限仅开放了部分API v2端点和有限的v1.1端点,这个search端点不在权限范围内,因此触发453错误。你原本目标是使用API v2,却误用了v1.1的代码逻辑。

修正方案(改用API v2)

以下是适配API v2的代码,同时解决权限和数据获取的问题:

import tweepy
import pandas as pd

# 替换为你的开发者凭证
api_key = "Your API Key"
api_secret = "Your API Secret"
access_token = "Your Access Token"
access_token_secret = "Your Access Token Secret"
bearer_token = "Your Bearer Token"  # 从Twitter开发者平台获取

# 初始化API v2客户端
client = tweepy.Client(
    bearer_token=bearer_token,
    consumer_key=api_key,
    consumer_secret=api_secret,
    access_token=access_token,
    access_token_secret=access_token_secret
)

username = "target_username"
query = f"from:{username}"
# API v2要求ISO 8601格式时间,注意:基础版仅支持最近7天数据,需历史数据需升级至高级版
start_time = "2023-01-01T00:00:00Z"
end_time = "2023-01-31T23:59:59Z"

tweets = []
try:
    # 调用v2搜索端点,指定需获取的字段
    response = client.search_all_tweets(
        query=query,
        start_time=start_time,
        end_time=end_time,
        tweet_fields=["public_metrics", "created_at", "text"],
        max_results=100
    )

    # 处理返回结果
    if response.data:
        for tweet in response.data:
            tweets.append({
                "Tweet": tweet.text,
                "Likes": tweet.public_metrics["like_count"],
                "Retweets": tweet.public_metrics["retweet_count"],
                "Replies": tweet.public_metrics["reply_count"],
                "Created Time": tweet.created_at
            })

        # 处理分页(结果超过100条时)
        while "next_token" in response.meta:
            response = client.search_all_tweets(
                query=query,
                start_time=start_time,
                end_time=end_time,
                tweet_fields=["public_metrics", "created_at", "text"],
                max_results=100,
                next_token=response.meta["next_token"]
            )
            for tweet in response.data:
                tweets.append({
                    "Tweet": tweet.text,
                    "Likes": tweet.public_metrics["like_count"],
                    "Retweets": tweet.public_metrics["retweet_count"],
                    "Replies": tweet.public_metrics["reply_count"],
                    "Created Time": tweet.created_at
                })

except tweepy.TweepError as e:
    print(f"请求错误: {str(e)}")
except Exception as e:
    print(f"其他错误: {str(e)}")

# 导出到Excel
df = pd.DataFrame(tweets)
df.to_excel("tweets_with_metrics.xlsx", index=False)
print("数据已成功导出")

关键注意事项

  • 权限限制:基础版权限仅能通过search_recent_tweets获取最近7天的推文;若需获取2023年1月这类历史数据,必须升级至高级版权限,此时使用search_all_tweets端点。
  • 时间格式:API v2要求时间参数为ISO 8601格式(如YYYY-MM-DDTHH:MM:SSZ),不可使用v1.1的since/until参数。
  • 数据字段:点赞、转发、评论数等互动数据封装在public_metrics字段中,必须在请求时通过tweet_fields参数指定才能获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:35:42