站点 robots.txt 里 Crawl-delay 是 10,脚本按每秒 1 次抓了 3000 页后被 403,同一时段浏览器访问完全不受影响。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

import urllib.robotparser as rp
r = rp.RobotFileParser()
r.set_url('https://example.com/robots.txt'); r.read()
print(r.crawl_delay('*'))

Crawl-delay 是给爬虫的请求间隔约定,单位是秒,1 秒一次等于超出十倍。部分站点会把不遵守的 UA 直接写进黑名单,重启也不会自动解除。这一点先确认清楚,后面就不用反复试。

碰到「robots Crawl-delay」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

具体做法是,启动时先拉一次 robots.txt;解析 Crawl-delay 和 Disallow 段;按这个值设置全局请求间隔;给爬虫单独标记 UA 方便后续申诉。

改完照着核一遍,间隔改成 10 秒后连续跑 5 小时没有再出现 403,抓取量从每小时 3600 页降到 360 页。

作者 9823189