requests_cache+BeautifulSoup爬取币安公告存在3-5分钟延迟问题咨询
问题成因分析
- 最核心的原因是你使用了
requests_cache.CachedSession发起请求,默认会遵循目标站点返回的缓存头规则:币安公告页面的响应头大概率设置了3-5分钟的缓存有效期(Cache-Control/Expires字段),在缓存有效期内你的请求不会真的访问币安服务器,直接读取本地缓存的旧页面内容,因此无法拿到最新公告。而你的个人站点没有配置这类缓存规则,所以相同代码运行无延迟。 - 币安配置了多层CDN缓存节点,新公告发布后需要等待CDN节点逐批刷新内容,你请求的CDN节点恰好存在3-5分钟的更新延迟。你的个人站点没有接入CDN或者CDN缓存时间配置极短,因此感知不到延迟。
- 币安的反爬策略限制:对高频请求的爬虫IP返回旧版本的静态页面,避免服务器被爬虫打满,而你访问个人站点无反爬限制,所以不会出现该问题。
- 币安公告列表的静态页面更新存在滞后:最新公告优先通过前端接口推送给访问页面的真实用户,静态HTML更新会晚于接口数据更新,你直接爬取静态HTML天然就存在延迟。
修复建议
- 优先替换
CachedSession为普通requests.Session,如果一定要用缓存,手动设置缓存有效期远低于你的爬取间隔,示例代码如下:
# 强制缓存1秒过期,避免读到旧内容 session = requests_cache.CachedSession('demo_cache', expire_after=1) # 或者每次请求强制跳过缓存 pageForFirstCheck = session.get(siteUrl, refresh=True)
- 改为抓币安公告的后台接口而非静态HTML页面,接口数据的更新速度远快于静态页面,延迟会大幅降低。
- 增加请求头模拟真实浏览器访问,添加
User-Agent、Cookie等字段,避免被反爬策略返回旧内容。
内容的提问来源于stack exchange,提问作者Liutzik
相关产品推荐
相关产品推荐

