增量抓取实战:Redis 指纹校验、带宽优化

📂 所属阶段:第四阶段 — 实战演练(项目开发篇)


1. 增量爬虫

import redis
import hashlib

class IncrementalSpider(scrapy.Spider):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.redis = redis.Redis()
    
    def parse(self, response):
        for item in response.css('div.item'):
            url = item.css('a::attr(href)').get()
            
            # 生成指纹
            fingerprint = hashlib.md5(url.encode()).hexdigest()
            
            # 检查是否已爬取
            if not self.redis.exists(f'crawled:{fingerprint}'):
                yield scrapy.Request(url, callback=self.parse_item)
                self.redis.set(f'crawled:{fingerprint}', 1)

2. 小结

增量抓取好处:

1. 节省带宽:不重复爬取
2. 提升效率:只爬新数据
3. 降低成本:减少服务器负担

实现方式:
- 指纹校验
- 时间戳比较
- 数据库查询

💡 记住:在大规模爬虫中,增量抓取是必须的。否则会浪费大量资源。


🔗 扩展阅读