- 在pipelines.py中自定义
DuplicatesPipeline
类:
class DuplicatesPipeline(object):
"""
去重
"""
def __init__(self):
self.book_set = set()
def process_item(self, item, spider):
name = item['name']
if name in self.book_set:
raise DropItem("Duplicate book found:%s" % item)
self.book_set.add(name)
return item
- 增加构造器方法,初始化用于去重的集合。
- 在process_item方法中,先取出item的name字段,检查书名是否已存在集合book_set中,如果存在,抛出DropItem异常,将item抛弃;否则,将item的name字段存入集合,返回item。
然后在配置文件settings.py
中启用DuplicatesPipeline
:
ITEM_PIPELINES = {
'example.pipelines.DuplicatesPipeline': 350,
}
即可实现去重。