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 的全部力量。


🔗 扩展阅读