You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests请求Craigslist返回15分钟缓存旧数据如何解决

问题根因

Craigslist 对公开的搜索结果HTML页面强制配置了服务端边缘缓存,你看到的Cache-Control: max-age=900是CDN/反向代理层硬编码的缓存规则,和客户端请求头、访问IP没有关系:

  • 你自行添加的Cache-Control: no-cache、自定义User-Agent这类请求头,会被缓存层直接忽略,根本不会触发回源拉取最新页面
  • 轮换代理IP也无法绕过,因为这类缓存是按搜索URL维度全局存储的,不是按访问者特征隔离的,同一个搜索路径在15分钟的缓存窗口内,所有访问者拿到的都是同一份静态快照
  • 你访问自有站点没有同类问题,是因为你的站点没有配置这种强制的公共缓存策略。
可行实现方案

不用和服务端缓存策略对抗,Craigslist本身就给内容订阅场景提供了更适配的数据源,延迟远低于爬取HTML页面:

  • 直接调用搜索结果的RSS接口:所有搜索页都支持RSS格式输出,只需要在原搜索URL后拼接&format=rss参数即可,这个接口的缓存TTL通常在1-2分钟,返回结构化的帖子数据,不用解析杂乱的HTML DOM。对你的场景,请求地址直接改成下面的就行:
url = "https://losangeles.craigslist.org/search/cta?query=honda+civic&format=rss"
  • 控制合理的轮询频率:哪怕用RSS接口,轮询间隔也不要低于1分钟,Craigslist有明确的反爬阈值,高频请求很容易被临时封禁IP,1-2分钟的轮询间隔完全能满足新帖提醒的需求。
  • 本地做帖子去重:每次拉取结果后把帖子ID持久化存储在本地(比如简单的文本文件、轻量KV数据库都可以),只有检测到本地没记录过的新帖子ID时才触发通知,避免重复推送。

注意:不要尝试给URL加随机查询参数(比如拼接随机时间戳)绕HTML页的缓存,这类特征非常容易被反爬系统识别,轻则触发验证码拦截,重则直接封禁IP段。

内容的提问来源于stack exchange,提问作者WaddleDee72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:48:19