使用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
相关产品推荐
相关产品推荐

