如何使用Python/Tweepy抓取Twitter指定用户的随机粉丝样本
实现随机粉丝抓取的解决方案
核心逻辑
你当前的代码只拉取前100条最新关注的粉丝,是因为Twitter API返回的粉丝ID默认按关注时间倒序排列,直接取前N条自然都是最新关注的用户。要实现随机抽样,最稳妥的方案是先拉取该账号的全量粉丝ID,再做无重复随机抽样。
适配修改后的代码
首先确保你初始化Tweepy API时开启了速率限制等待,避免拉取过程中被接口拦截:
# 初始化API时添加参数,自动等待速率限制重置 api = tweepy.API(auth, wait_on_rate_limit=True)
修改后的抽样函数如下:
import random def get_random_followers(username, sample_size=100): all_follower_ids = [] # 分页拉取全部粉丝ID,单次拉取上限5000条 for page in tweepy.Cursor(api.followers_ids, screen_name=username).pages(): all_follower_ids.extend(page) # 粉丝总数小于抽样数时直接返回全部结果 if len(all_follower_ids) <= sample_size: return all_follower_ids # 无重复随机抽取指定数量样本 return random.sample(all_follower_ids, sample_size)
特殊场景适配(大粉丝量账号)
如果目标账号粉丝量级达百万以上,全量拉取耗时过长,可使用近似随机方案:每次拉取1页(5000条)粉丝ID后随机抽取若干条,直到凑够100条样本即可。该方案的样本随机性略差,但拉取效率提升明显,代码示例如下:
import random def get_random_followers_fast(username, sample_size=100): sample_followers = [] for page in tweepy.Cursor(api.followers_ids, screen_name=username).pages(): # 每页随机抽取2条,直到凑够样本量 current_sample = random.sample(page, min(2, sample_size - len(sample_followers))) sample_followers.extend(current_sample) if len(sample_followers) >= sample_size: break return sample_followers
注意事项
- 目前Twitter v1.1接口的粉丝拉取权限需要开发者账号为Elevated等级,基础权限账号无法调用该接口
- 全量拉取百万级以上粉丝时,速率限制下15分钟最多可拉取7.5万条ID,需提前预估耗时
内容的提问来源于stack exchange,提问作者Ruhrpottgmabler
相关产品推荐
相关产品推荐

