调用Twitter get_followers API爬取10万粉丝耗时超预期如何解决
问题原因
你遇到的耗时超出预期的问题,主要来自以下几个核心原因:
- 接口选择错误:你当前调用的
api.get_followers接口返回的是完整的用户实体数据,不仅单请求数据传输量远大于纯ID查询,逐一遍历每个用户对象再存ID的操作也增加了不必要的开销。 - 实际请求次数高于理论值:Twitter API不会每次都返回满额的5000条数据,遇到被封禁、设为隐私、已注销的粉丝账号时会直接过滤该类账号,单次请求返回量不足5000就需要发起更多次请求才能拉完10万粉丝,触发更多速率限制等待。
- 遍历方式开销过高:你用
.items()逐一遍历每个用户对象,Tweepy的Cursor在逐次返回单个元素时会产生额外的迭代开销,进一步拉长整体运行时间。 - 权限不匹配:如果你的Twitter开发者账号是Essential权限而非Elevated权限,实际可用的接口速率限制会低于官方文档标注的15次/15分钟,也会导致等待次数增加。
解决方案
按优先级调整可大幅降低爬取耗时:
- 改用专门拉取粉丝ID的接口
替换get_followers为get_follower_ids,该接口直接返回粉丝ID列表,不需要拉取冗余的用户实体数据,单请求响应速度提升非常明显,配合分页遍历的代码示例:
for page in Cursor(api.get_follower_ids, screen_name=screen_name, count=5000).pages(): ids.extend(page)
- 改用分页遍历而非单元素遍历
直接用.pages()批量处理每一页的5000个ID,一次性扩展到结果列表中,省去逐次迭代的开销,比.items()逐一遍历效率高30%以上。 - 校验开发者账号权限
确认你的开发者账号已升级为Elevated权限,Essential权限的接口调用限额仅为Elevated权限的一半甚至更低,会直接导致等待时间翻倍。 - 避免同密钥并发其他请求
爬取过程中不要用同一套开发者密钥发起其他类型的Twitter API请求,防止占用速率限额,导致额外的等待。
内容的提问来源于stack exchange,提问作者Nishothan Vettivel
相关产品推荐
相关产品推荐

