
"""scrapy 保存管道数据"""
from scrapy.exporters import CsvItemExporter
class CsvPipeline:
def __init__(self):
# 文件存储初始化操作
self.file = open('filename.csv', 'wb')
self.exporter = CsvItemExporter(file=self.file, include_headers_line=True)
self.exporter.start_exporting()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
def close_spider(self, spider):
self.exporter.finish_exporting()
self.file.close()
"""scrapy 管道去重保存"""
import json
import hashlib
from scrapy.exceptions import DropItem
from scrapy.exporters import CsvItemExporter
class DupefiltePipeline:
def __init__(self):
# 去重集合
self.fingerprints = set()
# 文件存储初始化操作
self.file = open('filename.csv', 'wb')
self.exporter = CsvItemExporter(file=self.file, include_headers_line=True)
self.exporter.start_exporting()
def process_item(self, item, spider):
fp = self.item_fingerprint(item)
if fp in self.fingerprints:
raise DropItem('duperfilters')
self.fingerprints.add(fp)
self.exporter.export_item(item)
return item
def item_fingerprint(self, item):
dump_item = json.dumps(item)
return hashlib.md5(bytes(dump_item, encoding='utf-8')).digest().hex()
def close_spider(self, spider):
self.exporter.finish_exporting()
self.file.close()
"""scrapy 管道保存到MongoDB"""
class BookPipeline:
# 开始爬虫
def open_spider( self, spider ):
print( " open. . . ")
# 定义一个变盘,记录爬取的数量
self.count = 0
try:
# 1. 获取MongoD8客户端
self.client - Mongoclient( " 1ocalhost" , 27817)
# 2. 获取数据库
self.db = self.client.dangdang
# 3.获取数据集合
self.collection = self.db.collection_dangdang
# 标识
self.opend = True
except BaseException as e :
print(e)
self.opend = Flase
# 执行数据棱型的处理
def process_item( se1f,item,spider ):
if self.opened:
self.collection.insert_one(dict(item))
self.count += 1
return item
# 结束爬虫
def close_spider( self, spider) :
print(f"爬取了{self.count}条数据")
print('closed...')
if self.opend:
# 说明: 如果数据库打开成立了,爬虫结束后,就掠数据库连接关闭棹
self.client.close()

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统