您的定期网络爬虫正在重新下载未发生变化的数据。以下是仅需 15 行代码的修复方案(条件 GET 请求)

发布日期:2026-05-26 10:01:34   浏览量 :7
发布日期:2026-05-26 10:01:34  
7

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

注意:这是一篇跨平台发布的文章。权威版本(完整长篇)发布在我的博客上:https://blog.spinov.online/blog/ethical-scraping-is-a-rate-limit-question/

太长不看版

关于“道德网络抓取”的争论一直围绕着机器人协议和服务条款展开。这些确实存在,但它们是你在发出第一个请求之前只需做一次的决定。它们无法告诉你第200次、600次或900次运行时的情况——而正是在这些时刻,你实际上给对方的服务器带来了负载,也正是在这些时刻,你实际上会被封禁。(撰写本文的良好契机:费德里科·特罗塔于2026年5月24日在《网络抓取俱乐部》上发表的《如何道德地抓取开源数据集》——他提到,一个“在亚马逊服务器上几乎只产生微小噪音的抓取程序,可能会真正降低公共数据门户的性能”,这一观点正是机器人协议争论中经常忽略的部分。)

在跨越32个抓取程序的2,190次生产环境抓取之后(其中最繁忙的是一个信任点评评论抓取程序,仅它自己就有962次运行),我确信一点:在实际的时间表中,“对源站礼貌”和“不被封禁”不再是两个问题,而是一个问题。答案主要是条件获取加上合理的速率限制——而不是勾选机器人协议复选框。

这些数据的来源:截至2026年5月,我自己的阿皮菲仪表板(apify.com/knotless_cadence)。2,190 = 我发布的32个演员程序的总运行次数之和;962 = 该信任点评抓取程序自身的生命周期计数器。这是原始平台数据,未经采样或推算。

这是实用的、代码优先的版本。长篇推理(以及针对单一网站的962次运行实际教会了我的内容)请参阅上述权威文章。

大多数抓取程序忽略的机制:条件获取

这不是一种黑客手段——它包含在超文本传输协议标准中(RFC 9110 §13,以及较旧的专注于此的RFC 7232:条件请求)。如果你询问得当,大多数服务器会在发送主体内容之前免费告诉你页面是否已更改:

  • 服务器在响应中发送ETag和/或Last-Modified
  • 你在下一次请求中将它们作为If-None-Match / If-Modified-Since发送回去。
  • 如果没有变化 → 服务器回复304 Not Modified,并带有空主体。你跳过解析步骤。源站几乎不需要做任何工作。

304是你能收到的最体贴的响应:你确认了没有新数据,而无需让服务器渲染并传输一个你已经拥有的页面。你也停止了向管道中注入重复的行数据。

获取器(可运行,约15行逻辑代码)

httpx实现。将其缓存持久化到磁盘,以便在多次运行间保留。自我节流,以免猛烈攻击同一主机。requests库的工作方式相同——相同的头部名称,相同的304响应。

import time
import json
import os
import hashlib
import httpx


class PoliteFetcher

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部