Python3 爬虫数据存储:MongoDB 操作指南
在爬虫项目中,我们经常会遇到非结构化或半结构化的网页数据——比如嵌套的评论列表、动态变化的字段、不同页面的字段差异等。这时传统的关系型数据库就显得有些束手束脚,而 MongoDB 作为文档型数据库的代表,其灵活的模式设计和类似 JSON 的数据结构,简直是为爬虫数据存储量身定做的。
本文将带你快速入门使用 Python3 操作 MongoDB,从环境搭建到核心 CRUD,再到实用的索引和聚合技巧,最后结合最佳实践,让你在爬虫项目中得心应手。
1. NoSQL 与 MongoDB 简介
NoSQL 数据库的优势
NoSQL(Not Only SQL)数据库专为大规模数据存储设计,对爬虫特别友好的特性有:
- 无严格模式:抓到新字段直接存,不用提前改表结构
- 支持嵌套数据:可以直接存网页里的列表、评论等嵌套内容
- 高性能读写:适合爬虫高频写入数据
NoSQL 常见分类
MongoDB 是什么
MongoDB 是基于 C++ 编写的开源文档数据库:
- 数据以 BSON(二进制 JSON)存储,支持嵌套文档和数组
- 分布式架构,易扩展
- 语法非常接近 JavaScript 对象,Python 操作起来也很顺手
2. 环境准备
安装 MongoDB(推荐 Docker 一键启动)
如果本地没有 MongoDB 服务,用 Docker 是最快的方式,适合开发测试:
安装 PyMongo 驱动
3. 基本连接操作
连接 MongoDB
选择数据库和集合
MongoDB 的结构是 客户端 -> 数据库 -> 集合 -> 文档,对应关系型数据库的 连接 -> 库 -> 表 -> 行。
4. 核心 CRUD 操作
插入数据:单条批量任你选
MongoDB 会自动为每条文档生成一个 _id 字段作为主键,也可以自己指定。
查询数据:灵活筛选
更新数据:局部更新更高效
推荐用 $set 做局部更新,避免覆盖整个文档。
删除数据
5. 高级查询与实用技巧
常用比较运算符
计数、排序与分页
6. 索引管理:爬虫去重与提速的利器
索引能大幅提升查询速度,尤其是唯一索引,是爬虫去重的常用手段。
7. 简单聚合:数据统计
聚合管道(Pipeline)可以对数据进行多步处理,比如统计标签分布:
8. 最佳实践
- 重用 MongoClient 实例:它自带连接池,不要每次操作都新建连接,爬虫中全局创建一个即可。
- 批量操作优先:用
insert_many、update_many或更灵活的bulk_write,减少网络开销。 - 合理用索引:为常用查询、排序、分组字段加索引,但不要滥用(索引会占用存储空间,降低写入速度)。
- 错误处理:捕获 PyMongo 异常,避免爬虫因数据库错误中断。
- 生产环境安全:修改默认端口,开启身份验证,不要暴露在公网。
9. 完整示例
这个示例模拟了爬虫存储文章数据的完整流程:
10. 资源推荐
通过本文的学习,你应该已经掌握了 PyMongo 的核心操作,快去结合自己的爬虫项目试试吧!

