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

Scrapy CrawlSpider爬取oddsportal时回调不执行 其他域名正常

问题根因
  1. 站点反爬拦截:Oddsportal配置了严格的反爬策略,Scrapy默认请求携带的User-Agent带有明显爬虫标识,会直接被站点防火墙拦截,返回403状态码或人机验证页面,无法拿到正常响应,回调函数自然不会触发。NBA官网反爬规则宽松,默认请求不会被拦截,因此程序可以正常运行。
  2. 代码写法不规范:你定义的Rule没有显式传入LinkExtractor实例,虽然框架有默认兜底逻辑,但很容易出现链接提取范围不符合预期的问题,进一步导致回调不执行。
修复方案
  • 替换默认请求标识:在项目settings.py中添加正常浏览器的User-Agent,伪装成普通用户请求:
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'
  • 关闭robots协议校验(请确认你的爬取行为符合站点相关规定后操作):Oddsportal的robots.txt默认禁止爬虫爬取业务内容,在settings.py中修改配置:
ROBOTSTXT_OBEY = False
  • 补全规则配置:显式指定链接提取器的匹配规则,只爬取NBA相关路径,避免无效请求,修改爬虫内的rules定义:
rules = (
    Rule(
        LinkExtractor(allow=r'/basketball/usa/nba/.*'),
        callback='parse_games',
        follow=True
    ),
)
  • 增加请求间隔:避免请求频率过高触发IP封禁,在settings.py中添加下载延迟配置:
DOWNLOAD_DELAY = 2

注意:如果完成以上配置后仍然无法拿到正常响应,说明站点触发了Cloudflare 5秒盾类的JS人机验证,此时纯静态HTTP请求无法通过校验,需要对接动态渲染工具(如Playwright、Splash)或代理IP池处理验证逻辑。

内容的提问来源于stack exchange,提问作者Rodrigo González Escudero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:21:34