我们之前做的项目都是以文本或者 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 pymongofrom 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/。更多相关功能以后在相应的项目中再讲解。

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

【往期阅读】

一千行 MySQL 详细学习笔记

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

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

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

本地储存数据_你的爬虫数据储存在哪?MongoDB入门篇相关推荐

  1. Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中

    Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中 一.资源 EasyExcel使用教程 Jsoup爬虫教程 二.代码 xml依赖 ...

  2. 探花交友_第2章-完善个人信息与MongoDB入门

    探花交友_第2章-完善个人信息与MongoDB入门 文章目录 探花交友_第2章-完善个人信息与MongoDB入门 1.完善个人信息 1.1.图片上传 1.1.1.图片存储解决方案 1.1.2.阿里云O ...

  3. mongodb 默认端口号_你的爬虫数据储存在哪?MongoDB入门篇

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

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

    点击上方"brucepk",选择"置顶公众号" 第一时间关注 Python 技术干货! "   阅读文本大概需要 3.1 分钟 我们之前做的项目都是以 ...

  5. 清掉数据_学习之大数据项目笔记第七篇【数仓模块-日志预处理篇】

    1 需求说明 1.1 清洗过滤 1)去除json数据体中的废弃字段(这是前端开发人员在埋点设计方案变更后遗留的无用字段): "email" "phoneNbr" ...

  6. 数据透视表怎么刷新数据_数据模型的Excel数据透视表刷新错误

    数据透视表怎么刷新数据 A simple data change can cause a strange pivot table refresh error, if you added the dat ...

  7. cxgrid 保存数据_什么是大数据

    大数据是具有海量.高增长率和多样化的信息资产,它需要全新的处理模式来增强决策力.洞察发现力和流程优化能力. Big data is high volume, high velocity, and/or ...

  8. spark读取hdfs路径下的数据_到底什么是数据湖

    随着移动互联网,物联网技术的发展,数据的应用逐渐从 BI 报表可视化往机器学习.预测分析等方向发展,即 BI 到 AI 的转变. 数据的使用者也从传统的业务分析人员转为数据科学家,算法工程师. 此外对 ...

  9. access对比数据_数据仓库系列之数据质量管理

    数据质量一直是数据仓库领域一个比较令人头疼的问题,因为数据仓库上层对接很多业务系统,业务系统的脏数据,业务系统变更,都会直接影响数据仓库的数据质量.因此数据仓库的数据质量建设是一些公司的重点工作. 一 ...

最新文章

  1. 2020年行政区划代码_2020年柳州市行政区划,了解柳州市有几个区,详细数据
  2. 近朱者赤,近墨者还是赤
  3. 程序编译生成的Hex、Bin、axf和elf格式
  4. 微信小程序-设置启动页面
  5. 《Go语言圣经》学习笔记 第八章 Groroutines和Channels
  6. NET问答: 如何在 ASP.NET Core Web API 的 Response 中添加自定义的 Header ?
  7. for else语句小tips : RUNOOB python练习题36
  8. 每日一题(19)—— 用变量a给出下面的定义
  9. vim nerdtree 标签_7款vim插件
  10. 释放摄像头_防爆摄像头在使用过程中会遇到哪些问题,如何处理
  11. 第十次课:Python函数(一)
  12. Mybatis原理解析(一)解析全局xml配置文件生成SqlSessionFactory过程
  13. 基于51单片机的热敏电阻测温设计
  14. 软件测试 因果+决策案例--中国象棋中走马
  15. 计算机保研英语,计算机保研面试英文自我介绍
  16. 单元测试,我有话说(No tests to run. No tests were executed)
  17. android 高德地图线路规划,路线规划-Android平台-开发指南-高德地图车机版 | 高德地图API...
  18. NES APU Replayer
  19. 计算机组老师颁奖词,教研组颁奖词5篇
  20. 火狐浏览器截图整个网页截图 截取整个网页

热门文章

  1. (二)生成深度伪造的方法
  2. WPF DataGrid:解决排序、ScrollIntoView、刷新和焦点问题
  3. Google TakeOut图片下载器
  4. GitHub 公开 B 站寄来的 DMCA 删除通知
  5. android怎么注释代码块,Android.mk 代码注释
  6. 沉船会有什么_世界六大沉船,最后一艘有40吨财宝!8吨黄金!你眼红了吗?
  7. mysql decimal 比较大小_10 分钟掌握 MySQL 的索引查询优化技巧
  8. 大华工业相机使用说明_大华C900系列SSD | 极速传输,不负美名
  9. android新浪登录接口,新浪游戏AndroidSDK接入文档—服务端.md
  10. linux 查询 lib信息,linux系统信息常用查询命令