Scrapy.Request未执行排查:start_requests正常parse_navpage请求失效
以下是几个核心排查方向,按优先级排序:
确认parse_navpage是否被触发
检查start_requests里的scrapy.Request是否正确指定了callback=self.parse_navpage,比如有没有写错方法名,或者漏写callback导致默认用了parse方法。
开启DEBUG日志验证:运行scrapy crawl scrape_zoopla -L DEBUG,搜索日志中是否存在类似Crawled (200) <GET file:///xxx> (referer: None) ['parse_navpage']的记录——如果没有,说明回调方法根本没被调用。检查本地文件URL格式
本地文件请求必须严格遵循file://协议规范:Windows路径需写成file:///C:/xxx/xxx.html,Linux/macOS路径写成file:///home/xxx/xxx.html(注意三个斜杠)。如果路径格式错误(比如少斜杠、Windows下未转义反斜杠),Scrapy会直接判定为无效请求,且不会抛出明显报错。
可以在parse_navpage里打印路径:print(f"待请求文件路径:{property_file}"),确认格式是否合规。验证parse_navpage内的yield逻辑是否执行
检查方法内是否有条件判断(如空列表遍历、if分支不满足)导致yield语句没被触发。可以在yield前后加打印:print("即将生成property请求") yield scrapy.Request(property_file, callback=self.parse_property) print(f"已生成请求:{property_file}")运行爬虫后,如果看不到这些打印,说明代码没走到yield的分支。
排查响应解析是否失败
如果property_file是从首个请求的响应中解析出来的,需验证解析逻辑是否正确:- 在parse_navpage里打印响应内容:
print(response.text),确认响应是否正常返回内容; - 检查XPath/CSS选择器是否写错,导致没拿到有效的文件路径(比如选择器匹配到空值,生成了无效的
property_file)。
- 在parse_navpage里打印响应内容:
检查调度器或中间件拦截
查看settings.py中的DOWNLOADER_MIDDLEWARES和SPIDER_MIDDLEWARES,确认有没有自定义中间件拦截了请求;也可以临时注释掉非必要的中间件,测试请求是否能正常发出。
内容的提问来源于stack exchange,提问作者Andrea

