Scrapy调用fetch爬取房产网站报429 Unknown Status如何解决
解决Scrapy爬取realestate.com.au返回429状态的实操方案
429是站点反爬触发的请求限流,仅调整Scrapy基础参数无法绕过,按以下优先级调整配置即可解决:
- 首先替换请求特征,抹除爬虫标识
- 换掉Scrapy默认带爬虫标识的User-Agent,在
settings.py中配置真实浏览器UA,同时补全常规请求头,参考配置:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Referer': 'https://www.realestate.com.au/', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } ROBOTSTXT_OBEY = False- 不要长期使用固定UA,可以安装
scrapy-fake-useragent库,配置中间件实现每次请求自动轮换真实浏览器UA,降低被识别概率。
- 换掉Scrapy默认带爬虫标识的User-Agent,在
- 严格控制请求频率,避免触发限流规则
- 拉长基础请求间隔,在
settings.py中配置:
DOWNLOAD_DELAY = 3 RANDOMIZE_DOWNLOAD_DELAY = True # 实际间隔在0.5*DOWNLOAD_DELAY到1.5*DOWNLOAD_DELAY之间随机,避免固定间隔被识别 CONCURRENT_REQUESTS = 1 # 关闭高并发,同一时间仅发1个请求 AUTOTHROTTLE_ENABLED = True AUTOTHROTTLE_TARGET_CONCURRENCY = 1 RETRY_TIMES = 2 # 不要反复重试,重试次数过多会加重限流- 触发429后立刻暂停爬取15分钟以上再恢复,该站点对触发限流的IP会有冷却惩罚,连续重试会延长封禁时间。
- 拉长基础请求间隔,在
- 替换请求出口IP
数据中心IP段基本被该站点全量标记,必须使用住宅代理IP池配置轮换代理,在下载器中间件中实现每个请求绑定不同的住宅代理IP,单IP请求次数不要超过10次。 - 过TLS指纹检测
如果以上配置调整后仍返回429,说明站点开启了TLS/HTTP2指纹校验,Scrapy默认下载器的指纹和真实浏览器不一致会被直接拦截。此时替换默认下载器为scrapy-playwright,用无头Chrome内核发起请求,模拟真实浏览器的网络指纹即可绕过,配置时关闭图片、CSS等不必要资源的加载,控制爬取速度即可。
内容的提问来源于stack exchange,提问作者CountDOOKU
相关产品推荐
相关产品推荐

