你的爬虫数据储存在哪?MongoDB入门篇

点击上方"brucepk",选择"置顶公众号"

第一时间关注 Python 技术干货!

“   阅读文本大概需要 3.1 分钟

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

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

下载 MongoDB

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

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

启动 MongoDB 服务

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

下载 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 和端口号。

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

信息查找

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

简单举两个栗子:

1 搜索对应歌手的 id信息

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

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

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

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

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

2 正则匹配查询

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

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

    运行后查询结果如下:

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

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

    pk哥 还没开通留言功能,觉得不错,点赞、转发朋友圈都是一种支持。

    推荐阅读

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

    Python让你的数据生成可视化图形

    让代码和迈克杰克逊一起跳舞

    brucepk

    长按二维码关注我们

    本公众号专注:

    1.Python 技术分享

    2.Python 爬虫分享

    3.资料、工具共享

     欢迎关注我们,一起成长!

    • 1
      点赞
    • 7
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值