当前位置: 首页 > news >正文

Scrapy爬虫集成MongoDB存储

1:在settings.py文件中添加MongoDB相关配置:

# settings.py# MongoDB配置
MONGO_URI = 'mongodb://localhost:27017'  # MongoDB连接字符串
MONGO_DATABASE = 'yiche_cars'  # 数据库名称
MONGO_COLLECTION = 'car_info'  # 集合名称

2:创建MongoDB管道:

# pipelines.pyimport pymongo
from itemadapter import ItemAdapter
from scrapy.exceptions import DropItemclass MongoDBPipeline:def __init__(self, mongo_uri, mongo_db, collection_name=None):self.mongo_uri = mongo_uriself.mongo_db = mongo_dbself.collection_name = collection_name  # 可选:自定义集合名self.client = Noneself.db = None@classmethoddef from_crawler(cls, crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'),mongo_db=crawler.settings.get('MONGO_DATABASE', 'scrapy_db'),collection_name=crawler.settings.get('MONGO_COLLECTION')  # 可选)def open_spider(self, spider):try:self.client = pymongo.MongoClient(self.mongo_uri, serverSelectionTimeoutMS=5000)self.db = self.client[self.mongo_db]# 测试连接self.client.server_info()spider.logger.info("成功连接MongoDB!")except pymongo.errors.ServerSelectionTimeoutError as err:spider.logger.error('MongoDB连接失败: %s', err)raise DropItem("无法连接MongoDB")def close_spider(self, spider):if self.client:self.client.close()def process_item(self, item, spider):# 如果设置了 collection_name,优先使用它,否则使用 spider.namecollection_name = self.collection_name if self.collection_name else spider.nametry:self.db[collection_name].insert_one(ItemAdapter(item).asdict())spider.logger.debug(f"Item 写入 MongoDB: {self.mongo_db}/{collection_name}")except pymongo.errors.PyMongoError as e:spider.logger.error("写入MongoDB错误: %s", e)raise DropItem("写入数据库失败")return item  # 必须返回 item,否则后续 pipeline 无法处理

3:在settings.py中启用MongoDB管道:

# settings.pyITEM_PIPELINES = {'spt_spider.pipelines.MongoPipeline': 300,# 其他管道...
}

运行爬虫:

scrapy crawl yiche

http://www.xdnf.cn/news/1240057.html

相关文章:

  • 13.Home-面板组件封装
  • 区块链 和 一致性哈希的结合
  • 基于高斯光束干涉的微球体相位成像系统设计与实现
  • JVM学习日记(十六)Day16——性能监控与调优(三)
  • Python实现Word转PDF全攻略:从入门到实战
  • Linux U盘识别问题排查指南
  • Spring Boot + ShardingSphere 分库分表实战
  • 机器学习——决策树(DecisionTree)+ 过采样 + 交叉验证 案例:电信客户流失数据
  • 飞算科技:用自主创新技术,为行业数字化转型按下 “加速键”
  • ICCV2025 Tracking相关paper汇总和解读(19篇)
  • 13015计算机系统原理-速记宝典
  • Web 开发 12
  • 移动前后端全栈项目
  • 小迪安全v2023学习笔记(五十一讲)—— 持续更新中
  • Nexus配置npm私有仓库
  • Java项目:基于SSM框架实现的商铺租赁管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • LLM大模型开发-SpringAI:ChatClient、Ollama、Advisor
  • io_destroy系统调用及示例
  • 基于 LangChain + 通义千问 + bge-large 中文 Embedding 搭建一个RAG问答示例
  • FastAPI入门:安全性
  • 第12届蓝桥杯Scratch图形化【省赛】初级组 2021年4月24日
  • MySQL学习之MVCC多版本并发控制
  • python常用数据类型
  • 13.Redis 的级联复制
  • 03.一键编译安装Redis脚本
  • sqli-labs:Less-23关卡详细解析
  • 【运维基础】Linux 硬盘分区管理
  • 数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter
  • Corrosion2靶机练习笔记
  • 选择排序原理与C语言实现详解