我们之前做的项目都是以文本或者 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 默认端口号_你的爬虫数据储存在哪?MongoDB入门篇相关推荐

  1. mongodb 默认端口号_快2020年了,该如何面对BATJM对MongoDB灵魂式的拷问呢?

    关注我,可以获取最新知识.经典面试题以及微服务技术分享 MongoDB是基于分布式文件存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案,且MongodDB是一个介于关 ...

  2. 本地储存数据_你的爬虫数据储存在哪?MongoDB入门篇

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

  3. tomcat中间件的默认端口号_死磕Tomcat系列(1)——整体架构

    点击上方"Java技术前线",选择"置顶或者星标" 与你一起成长 在许多的高端开发的岗位中都会或多或少有要求面试人员要研究过一些常用中间件源码.这是因为一切的秘 ...

  4. tomcat中间件的默认端口号_等保2.0涉及的Apache Tomcat中间件(下)

    一.访问控制 首先这里的访问控制要求,就是针对tomcat管理控制台中的用户权限,即Tomcat Manager,它是Tomcat自带的,用于对Tomcat自身以及部署在Tomcat上的应用进行管理的 ...

  5. mysql数据库怎么查看端口号_怎么查看数据库端口号(mysql怎么查看端口号)

    怎么查看数据库端口号(mysql怎么查看端口号) 2020-05-08 11:20:02 共9个回答 如何查看自己数据库的端口号 navicat,找到服务器,右键->连接属性,就找到端口号了 如 ...

  6. 常见的数据库,默认端口号是多少?

    常见的数据库,默认端口号是多少: 一.关系型数据库 1.MySql数据库 ,默认端口是: 3306: 2.Oracle数据库 ,默认端口号为:1521: 3.Sql Server数据库 ,默认端口号为 ...

  7. b宝塔 centos端口更改_centos修改ssh默认端口号的方法示例

    linux 一:修改/etc/ssh/sshd_config配置文件(注意:这里是sshd_config,而不是ssh_config) 1:查看ssh的默认端口号 netstat -anp|grep ...

  8. 如何修改mysql占用的端口号_修改mysql端口号(mysql的端口号)

    修改mysql端口号(mysql的端口号) 2020-05-07 22:12:00 共10个回答 如何查看mysql默认端口号和修改端口号 登录mysql,使用命令showglobalvariable ...

  9. tomcat默认端口号(三个tomcat端口号)

    tomcat默认端口号(三个tomcat端口号) 2020-05-08 10:43:21 共10个回答 Tomcat的默认端口号是多少 您好,提问者:Tomcat的默认端口号是:8080.weblog ...

最新文章

  1. 【廖雪峰python入门笔记】list_按照索引访问
  2. Win2008 R2 RemoteApp深度体验之四,RemoteApp程序测试
  3. Spring.NET 1.3.1 新特性探索系列1——ASP.NET MVC的依赖注入
  4. 家用电器用户行为分析与事件识别_用户行为分析埋点实时数仓实践
  5. boost:验证BOOST_CONCEPT_ASSERT捕获了错误
  6. Repeater片段
  7. 【渝粤教育】国家开放大学2018年春季 0579-22T电路及磁路(2)(一) 参考试题
  8. HTML cite元素
  9. Struts2学习笔记(四) Action(中)
  10. php设置ip,php curl如何设置ip
  11. PIR控制器调节器并网逆变器电流谐波抑制策略
  12. MyQQ:可以在终端里面上的QQ
  13. 数量关系--容斥原理
  14. MP1655GG-Z MPS/美国芯源 MOSFET 的开关模式转换器 资源 方案
  15. ETC是什么,ETC系统主要有哪几部分构成?
  16. CompletableFuture模拟复杂场景使用测试。。。
  17. 火柴棒游戏(暴力枚举)C++
  18. AutoCAD与ArcGIS的5种集成方式
  19. python3 判断素数
  20. 性能测试连载 (8)-jmeter 实战分析并发、RPS、RT 公式换算

热门文章

  1. [Web开发] IE8 网页开发参考文档
  2. jsf初学解决GlassFish Server 无法启动
  3. sftp 安全文件传输
  4. rust电器元件需要什么材料_腐蚀Rust电力系统有哪些工具 腐蚀Rust电力系统工具汇总 其他工具-游侠网...
  5. Win-MASM64汇编语言-CALL/RET/RETF指令
  6. Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)
  7. webbrowser控件 加载为空白_OA系统公文控件升级操作说明
  8. java界面编程 pdf_java – PDF页面使用itext重新排序
  9. python 类变量 none 内存泄露_Python中使用自定义类class作为海量数据结构时内存占用巨大的问题...
  10. 国产441b电子计算机,国产441B晶体管计算机文档(讲义)