#Spider 中间件深度定制:信号拦截、修改爬虫行为
📂 所属阶段:第五阶段 — 战力升级(分布式与进阶篇)
#1. Spider 中间件
class CustomSpiderMiddleware:
def process_spider_input(self, response, spider):
# 处理响应前
spider.logger.info(f"Processing {response.url}")
def process_spider_output(self, response, result, spider):
# 处理爬虫输出
for item in result:
yield item
def process_spider_exception(self, response, exception, spider):
# 处理异常
spider.logger.error(f"Error: {exception}")#2. 信号系统
from scrapy import signals
class SignalMiddleware:
def __init__(self, crawler):
self.crawler = crawler
crawler.signals.connect(self.spider_opened, signal=signals.spider_opened)
crawler.signals.connect(self.spider_closed, signal=signals.spider_closed)
def spider_opened(self, spider):
spider.logger.info("Spider opened")
def spider_closed(self, spider):
spider.logger.info("Spider closed")#3. 小结
中间件用途:
1. 信号拦截:监听爬虫事件
2. 修改行为:动态调整爬虫
3. 统计数据:收集爬虫指标
应用场景:
- 性能监控
- 错误处理
- 动态配置💡 记住:中间件是 Scrapy 的灵魂。掌握它,你就掌握了 Scrapy 的全部力量。
🔗 扩展阅读

