本地储存数据_你的爬虫数据储存在哪?MongoDB入门篇
发布日期:2021-06-24 17:54:05 浏览次数:2 分类:技术文章

本文共 2703 字,大约阅读时间需要 9 分钟。

我们之前做的项目都是以文本或者 csv 文件保存在本地,如果保存的数据量比较大的话,保存在本地就不够灵活了。这边文章带大家入门怎么用 MongoDB 来储存爬虫的数据。

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。其内容存储形式类似 JSON 对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。

下载 MongoDB

最近一段时间试了下,官网在下载页面 (https://www.mongodb.com/download-center?jmp=nav#community) 选择对应版本跳转到下载页面时没有反应,无法下载,刷新了 N 次都不起作用,公司和家里的电脑都是这样。网上查了下,很多人都有这样的问题,官网一直也没解决。

263259779be1cd281086cafa13bd0755.png

我去网上找了一下,下载了一个老版本的,可以用,你们如果有新版本能下载的话可以私聊发我,不胜感激!你们如果也官网下载不了的话,电脑版本是 windows 64,可以在我这里获取。公众号回复「mongodb」获取。

启动 MongoDB 服务

安装好后,新建一个 db 文件夹,用来存放 MongoDB 数据库。然后启动 cmd,进入你下载的 MongoDB 解压的路径的 bin 文件,例如我的为 C:\Program Files\MongoDB\Server\3.2\bin,然后输入 mongod --dbpath=E:\db,下图就表示启动 MongoDB 服务成功。

c26df35dfe27beaece98c6e285f352de.png

下载 pymongo 库

我们用 Python 操作 MongoDB 需要安装 pymongo 库,用 pip 命令安装即可。

pip install pymongo

如果你的编辑器是 Pycharm,再把它安装到 Pycharm 中,这样在 Pycharm 中就可以 import 了。

数据储存

接下来我们用 MongoDB 来保存爬虫数据。我就拿之前的一个简单的爬虫项目:爬取网易云音乐歌手信息的项目。还没上车的可以戳下面文章看下。

Python 爬虫获取网易云音乐歌手信息

MongoDB 支持保存的数据格式为字典形式。接下来我以保存歌手信息举例,歌手信息的数据代码之前已存在,直接导入 singer163 包调用 get_data 方法即可。

使用 PyMongo 库里面的 MongoClient。一般来说,传入 MongoDB 的 IP 及端口即可,端口参数不传的话默认是 27017,其他请直接看详细代码,代码中有注释。(温馨提示:代码显示不全的话向右轻轻滑动即可查看全部代码)

import pymongo from singer163 import get_data client = pymongo.MongoClient(host='localhost', port=27017)    # 创建 MongoDB 连接对象 # 歌手类型列表 idlist = [1001, 1002, 1003, 2001, 2002, 2003, 4001, 4002, 4003, 6001, 6002, 6003, 7001, 7002, 7003] print('正在保存歌手信息,请稍后。。。') for id in idlist:     url = 'https://music.163.com/#/discover/artist/cat?id={}&initial=-1'.format(id)     data = get_data(url)                    # 获取需要保存的信息     db = client.sigers                      # 指定操作 sigers 数据库     collection = db.sigers                  # 指定操作的集合 sigers     result = collection.insert(data)        # 插入数据 print('保存歌手信息成功')

这样我们就把数据保存在 MongoDB 数据库中了,为了方便查看,我们可以下载一个 mongodb 可视化工具,之前叫 Robomongo,后面被收购了,改名 Robo 3T。可在官网下载:https://robomongo.org/

安装后打开 Robo 3T,连接 MongoDB 数据库,输入 IP 和端口号。

aeed4a31a3524b9536dc7e0850895e42.png

Robo 3T 有三种展示数据的方式,树形结构,表格结构,文档结构,可在右上角点击切换。在 MongoDB 中,每条数据其实都有一个 _id 属性来唯一标识。如果没有显式指明该属性,MongoDB 会自动产生一个 ObjectId 类型的 _id 属性。

783401f175a818ae8a560145bbbb7fca.png

信息查找

因为保存的歌手信息有循环分页,Robo 3T 中信息也是分页的,点击左右小箭头实现跳转到上一页和下一页。当信息量大的话,是否可以检索查找呢?当然是可以的,通过简单的命令实现查找。

简单举两个栗子:

1 搜索对应歌手的 id信息

我们先来看看显示所有信息的命令:

db.getCollection('sigers').find({})

搜索对应歌手的 id只需在{}中输入代码定义的字段的字典形式的数据即可。比如,我要搜索歌手李健的 id,输入以下命令:

db.getCollection('sigers').find({
"歌手名字" : "李健"})

点击左上角运行按钮就会得到查询结果。

2 正则匹配查询

比如我要查找歌手中周姓歌手的信息。

db.getCollection('sigers').find({
'歌手名字': {
'$regex': '^周.*'}})

运行后查询结果如下:

ce6e39bdf3e02c19f248d0861e953cd5.png

本文只是作为一篇 mongdb 数据储存的入门文章,其他很多关于增删改查的功能本文就不做详细讲解了,详见官方文档:http://api.mongodb.com/python/current/api/pymongo/。更多相关功能以后在相应的项目中再讲解。

此文章对你有点帮忙的话希望大家能多给点支持,关注、点赞、转发都是对我的一种支持,有什么问题欢迎在后台联系我,也可以在后台加入技术交流群,群里有大神,可以一起交流学习。

【往期阅读】

一千行 MySQL 详细学习笔记

你必须知道的10个Python第三库

面试送命题,你为什么从上家公司离职?(面试题总结大全)

eb4acbbbef7f79dc9324cb782a1374da.png

d726df69a0933f214d70f52ff4c9b149.png

点「在看」的人都变好看了

转载地址:https://blog.csdn.net/weixin_34237125/article/details/112632802 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:做三维模型_这几款倾斜实景三维裸眼3D采集软件你了解吗?
下一篇:10个性鼠标指针主题包_游戏鼠标推荐

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月15日 23时01分16秒