如何使用Tweepy无搜索关键词提取列表用户指定日期范围内的推文
报错原因
你使用的是4.0及以上版本的Tweepy,api.user_timeline接口早已移除since、until两个参数,这两个参数原本属于旧版搜索接口,不支持时间线拉取场景,因此会抛出非预期参数的提示。
实现自有列表用户指定时间范围推文的步骤
- 先调用列表成员接口拉取你自有列表下的所有账号
- 逐个拉取账号的时间线推文(标准API最多支持拉取单个用户最近3200条公开推文)
- 本地过滤推文的发布时间,筛选2016-2021年的结果即可
修正后的完整代码
# 导入依赖库 import tweepy import pandas as pd import datetime # 身份验证(替换成你自己的密钥) consumer_key = "你的consumer_key" consumer_secret = "你的consumer_secret" access_token = "你的access_token" access_token_secret = "你的access_token_secret" auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth, wait_on_rate_limit=True) # 定义你要筛选的时间范围,对齐UTC时区避免过滤误差 start_date = datetime.datetime(2016, 1, 1, tzinfo=datetime.timezone.utc) end_date = datetime.datetime(2021, 12, 31, 23, 59, 59, tzinfo=datetime.timezone.utc) # 替换成你的自有列表ID,也可以用owner_screen_name+slug参数指定列表 list_id = "你的自有列表ID" # 拉取列表所有成员 list_members = api.list_members(list_id=list_id) all_tweets = [] # 遍历每个列表成员拉取推文 for user in list_members: # 拉取用户最多3200条历史推文 for tweet in tweepy.Cursor(api.user_timeline, screen_name=user.screen_name, tweet_mode="extended").items(3200): # 过滤时间符合要求的推文 if start_date <= tweet.created_at <= end_date: all_tweets.append([tweet.full_text, tweet.created_at, user.screen_name]) # 转成DataFrame tweets_df = pd.DataFrame(all_tweets, columns=['Tweet Text', 'Tweet Datetime', 'username'])
注意事项
- 标准开发者API的
user_timeline接口最多仅支持拉取单个用户最近3200条公开推文,如果目标用户在2016-2021年的发推量超过3200条,更早的推文无法通过标准接口获取,需要申请学术研究API权限。 - 代码中
tweet_mode="extended"参数用于拉取完整的推文内容,避免长文本被截断。
内容的提问来源于stack exchange,提问作者PONIO
相关产品推荐
相关产品推荐

