如何通过推文ID列表批量爬取对应推文的所有回复内容
你之前用BeautifulSoup、Selenium爬不到内容是必然的,X(原Twitter)现在的反爬强度和前端渲染逻辑,这两个原生方案根本跑不通:
- BeautifulSoup只能抓取页面初始返回的静态HTML,X的回复内容全部为用户触发滚动后才异步加载,初始源码里没有任何有效回复数据
- 原生Selenium默认携带明确的自动化测试指纹,X的反爬系统可以直接识别拦截,手动修改指纹绕过的成本极高,完全没必要自己从零实现
下面是亲测可落地的实现方案,按稳定性从高到低排序:
推文回复爬取落地方案
方案1:官方API对接(稳定性最高,合规风险最低)
- 适合对数据完整性要求高、有长期爬取需求的场景,完全不需要和反爬系统对抗
- 操作流程:
- 申请X开发者账号,获取API调用凭证,免费档单月支持拉取1000条推文关联数据,处理小批量推文ID列表完全够用,数据量较大时可以按需选择付费档位
- 直接调用平台的对话检索接口,传入目标推文ID,分页拉取该推文所属对话线程下的所有回复,返回结果自带回复正文、发布者信息、发布时间、互动数据等全字段,不需要额外做页面解析
- 可以直接用tweepy库封装好的方法开发,不需要手写请求签名逻辑,示例代码:
import tweepy # 填入自己申请到的API凭证 bearer_token = "你的Bearer Token" client = tweepy.Client(bearer_token=bearer_token) def fetch_all_replies(tweet_id): replies = [] # 首次拉取 resp = client.get_tweets_search_recent( query=f"conversation_id:{tweet_id}", max_results=100, tweet_fields=["created_at", "author_id", "text"] ) if resp.data: replies.extend(resp.data) # 分页拉取剩余所有结果 while "next_token" in resp.meta: next_token = resp.meta["next_token"] resp = client.get_tweets_search_recent( query=f"conversation_id:{tweet_id}", max_results=100, next_token=next_token, tweet_fields=["created_at", "author_id", "text"] ) if resp.data: replies.extend(resp.data) return replies
- 注意事项:免费档仅支持拉取最近7天内发布的推文回复,更早的历史内容需要升级付费API权限。
方案2:开源爬虫工具(无需申请API,零使用成本)
- 适合不想走官方申请流程、临时爬取小批量数据的场景,不需要启动图形化浏览器,爬取速度远高于Selenium
- 优先选择snscrape,这个工具已经封装好了X的底层接口请求逻辑,自带基础反爬绕过能力,不需要登录账号就可以使用
- 操作流程:
- 执行安装命令:
pip install snscrape - 直接通过对话ID参数检索对应推文下的所有内容,过滤掉原推文本身即可拿到全量回复,示例代码:
- 执行安装命令:
import snscrape.modules.twitter as sntwitter def fetch_replies_by_snscrape(tweet_id): replies = [] query = f"conversation_id:{tweet_id}" for tweet in sntwitter.TwitterSearchScraper(query).get_items(): # 过滤原推文,仅保留回复内容 if tweet.id != tweet_id: replies.append({ "content": tweet.rawContent, "username": tweet.user.username, "publish_time": tweet.date, "like_count": tweet.likeCount }) return replies
- 异常处理:如果遇到临时限流或者接口失效,可以更换为twscrape工具,支持导入个人X账号Cookie做请求签名,稳定性更强;爬取时给每次请求加3-5秒的随机间隔,基本不会触发拦截。
通用避坑提示
- 无论使用哪种方案,不要用单IP做高频请求,请求频率控制在1次/秒以上,避免IP被临时封禁
- 爬取到的内容仅限个人研究使用,不要用于商业用途或者公开发布,避免违反平台用户协议。
内容的提问来源于stack exchange,提问作者Chacko
相关产品推荐
相关产品推荐

