Python3 爬虫数据存储:MongoDB 操作指南
在爬虫项目中,我们经常会遇到非结构化或半结构化的网页数据——嵌套的评论列表、动态变化的字段、不同页面字段差异巨大……此时,传统的relational-database就显得有些“束缚手脚”。而 MongoDB 作为文档型数据库的代表,凭借灵活的模式设计和类似 JSON 的数据结构,几乎是为爬虫数据存储而生。
本文将从environment-setup开始,带你逐步掌握 Python3 操作 MongoDB 的核心技能,包括基础 CRUD、高级查询、索引去重与聚合统计,并结合爬虫场景给出最佳实践,让你在实战中游刃有余。
1. NoSQL 与 MongoDB 简介
NoSQL 数据库的优势
NoSQL(Not Only SQL)数据库是为大规模、高并发、灵活数据模型设计的数据库。对于爬虫场景,它的几个特性非常友好:
- 无严格模式:抓取到新字段可以直接写入,无需预先修改表结构;
- 支持嵌套数据:可以像 JSON 一样直接存储列表、对象等复杂结构,完美对应网页中的嵌套内容;
- 高性能读写:写入速度极快,适合爬虫高频入库的场景。
NoSQL 常见分类
MongoDB 是什么
MongoDB 是一款用 C++ 编写的开源文档数据库,它:
- 使用 BSON(二进制 JSON)存储数据,天然支持嵌套文档和数组;
- 具备分布式架构,易于水平扩展;
- 查询语法非常贴近 JavaScript 对象,对 Python 开发者也很友好,通过 PyMongo 即可轻松操作。
2. 环境准备
安装 MongoDB(推荐 Docker 一键启动)
如果本地没有 MongoDB 服务,使用 Docker 是最快的方式,特别适合开发测试:
安装 PyMongo 驱动
3. 基本连接操作
连接 MongoDB
选择数据库和集合
MongoDB 的组织结构为:客户端 → 数据库 → 集合 → 文档,相当于relational-database中的 连接 → 库 → 表 → 行。
4. 核心 CRUD 操作
插入数据:单条批量任意选
MongoDB 会自动为每条文档生成一个 _id 字段作为主键,你也可以自行指定。
查询数据:灵活筛选
更新数据:局部更新更高效
推荐使用 $set 进行局部更新,避免覆盖整个文档。
删除数据
5. 高级查询与实用技巧
常用比较运算符
计数、排序与分页
6. 索引管理:爬虫去重与提速的利器
索引能极大提升查询速度,尤其是唯一索引,是爬虫实现 URL 去重的常用手段。
7. 简单聚合:数据统计
聚合管道(Aggregation Pipeline)可以对数据进行多步骤处理。下面以统计标签分布为例:
8. 最佳实践
-
重用 MongoClient 实例
PyMongo 的MongoClient自带连接池,不要在每次操作时新建连接,爬虫中全局创建一个实例即可。 -
批量操作优先
尽量使用insert_many、update_many或更灵活的bulk_write,减少网络往返开销。 -
合理使用索引
为常用查询、排序、分组字段创建索引,但不要滥用——索引会占用存储空间并降低写入速度。 -
错误处理
捕获 PyMongo 异常,防止爬虫因数据库错误而中断。 -
生产环境安全
修改默认端口,开启身份验证,不要将数据库直接暴露在公网。
9. 完整示例
下面是一个模拟爬虫存储文章数据的完整流程:
10. 资源推荐
通过本文的学习,你已经掌握了 PyMongo 的核心操作。赶快把这些技巧应用到你的爬虫项目中,享受 MongoDB 带来的高效与灵活吧!

