#数据去重与增量更新:Redis 指纹校验、增量抓取
📂 所属阶段:第二阶段 — 数据流转(数据处理篇)
#1. 指纹去重
import hashlib
import redis
class DuplicatesPipeline:
def __init__(self):
self.redis = redis.Redis(host='localhost', port=6379)
def process_item(self, item, spider):
# 生成指纹
fingerprint = hashlib.md5(
item['url'].encode()
).hexdigest()
# 检查是否存在
if self.redis.exists(f'item:{fingerprint}'):
raise DropItem("Duplicate item")
# 保存指纹
self.redis.set(f'item:{fingerprint}', 1)
return item#2. 增量抓取
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()
# 检查是否已抓取
if not self.redis.exists(f'crawled:{url}'):
yield scrapy.Request(
url,
callback=self.parse_item
)
self.redis.set(f'crawled:{url}', 1)#3. 小结
去重与增量的好处:
1. 节省带宽:不重复抓取
2. 提升效率:只抓取新数据
3. 降低成本:减少服务器负担
实现方式:
- 内存去重:简单但不持久
- Redis 去重:分布式、持久化💡 记住:在大规模爬虫中,去重和增量更新是必须的。否则会浪费大量资源。
🔗 扩展阅读

