运维学python之爬虫中级篇(八)MongoDB

1 MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。具有高性能、高可用性和自动扩展性。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象的BSON。字段值可以包含其他文档,数组及文档数组。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

1.1 安装MongoDB

MongoDB支持多种安装方式具体安装可以看官网更多安装方式,我这里只简单介绍源码包安装MongoDB社区版。

# 下载源码包
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.2.tgz
# 解压到本地
tar -zxvf mongodb-linux-x86_64-3.6.2.tgz
# 创建mongodb目录
mkdir -p /usr/local/mongodb
# 复制到刚刚创建的目录
cp -R -n mongodb-linux-x86_64-3.6.2/ /usr/local/mongodb
# 定义环境变量,将mongodb bin目录添加进去
export PATH=<mongodb-install-directory>/bin:$PATH
# 创建数据目录,默认为/data/db,如果你的目录不是这里,可以用--dbpath参数指定
mkdir -p /data/db

安装就完成了,就这么简单。

1.2 概念解析

下表给出了各种SQL术语和概念,以及相应的MongoDB术语和概念。

SQL MongoDB 解释
database database 数据库
table collection 数据库表/集合
row document or BSON document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins $lookup, embedded documents 表连接
primary key primary key 指定任何惟一的列或列组合作为主键/在MongoDB中,主键被自动设置为_id字段。

下表展示了一些数据库可执行文件和相应的MongoDB可执行文件,注意这个表没有全部列出来。

server/client MongoDB MySQL Oracle Informix DB2
Database Server mongod mysqld oracle IDS DB2 Server
Database Client mongo mysql sqlplus DB-Access DB2 Client

从上面的图表可以看出,MongoDB中与关系型数据库不同的地方是引入了collection(集合)、document文档的概念.
文档
文档是MongoDB中数据的基本单元,是MongoDB的核心概念,很类似关系数据库中的行(记录)集合可以被看作没有模式的表(表)
collection(集合)
表示一组MongoDB文档。一个集合相当于一个RDBMS表。一个集合存在于一个数据库中。集合没有强制的模式,一个集合中的文档可以有不同的字段。通常,集合中的所有文档都有类似或相关的目的。
数据库
mongodb中多个文档构成集合,多个集合构成数据库。用于集合的物理容器。每个数据库在文件系统上都有自己的一组文件。一个MongoDB服务器通常有多个数据库。
mongo shell
是MongoDB的一个交互式JavaScript接口。您可以使用mongo shell查询和更新数据,并执行管理操作。
可以看下图理解上面的概念:

2 与python整合

2.1 安装PyMongo

PyMongo 是MongoDB的Python驱动程序,不要安装与PyMongo不兼容的第三方“bson”包。PyMongo有自己的bson软件包;

# 执行python -m pip install pymongo命令即可安装,结果如下:
(myenv) [[email protected] myenv]$ python -m pip install pymongo
Collecting pymongo
  Downloading pymongo-3.6.0-cp34-cp34m-manylinux1_x86_64.whl (379kB)
    100% |████████████████████████████████| 389kB 73kB/s
Installing collected packages: pymongo
Successfully installed pymongo-3.6.0

安装完成后执行导入模块命令,查看是否成功:

>>> import pymongo
>>> 

注意:要确定你的机器上安装了MongoDB。

2.2 建立连接与操作

# 导入客户端模块
>>> from pymongo import MongoClient
# 创建客户端实例
>>> client = MongoClient()
# 这种方式与上面相同,上面不加参数默认连接的就是localhost和27017端口
>>> client = MongoClient(‘localhost‘, 27017)
# 还可以以URI方式连接
>>> client = MongoClient(‘mongodb://localhost:27017/‘)

获取数据库
使用client实例中的属性样式访问数据库

>>> db = client.test_database

如果数据库名称是这样的‘test-database‘,那么使用属性样式访问将不起作用,那么可以使用字典样式访问

>>>db = client[‘test-database‘]

获取collection(集合)

>>> collection = db.test_collection

或者(使用字典风格访问):

collection = db[‘test-collection‘]

文档
MongoDB中的数据使用json样式的文档表示(并存储)。在PyMongo中,我们使用字典来表示文档。例如,以下字典可能用于表示博客文章:

import datetime
from pymongo import MongoClient
client = MongoClient()

post = {"author": "Mike",
         "text": "My first blog post!",
         "tags": ["mongodb", "python", "pymongo"],
         "date": datetime.datetime.utcnow()}

插入文档
插入单个文档
要将文档插入到集合中,可以使用insert_one()方法:

#!/usr/bin/python3
#coding=utf-8

import datetime
from pymongo import MongoClient
client = MongoClient()

db = client.pythondb

post = {"author": "Maxsu",
         "text": "My first blog post!",
         "tags": ["mongodb", "python", "pymongo"],
         "date": datetime.datetime.utcnow()}

posts = db.posts
post_id = posts.insert_one(post).inserted_id
print ("post id is ", post_id)

批量插入
将列表作为第一个参数传递给insert_many()来执行批量插入操作

#!/usr/bin/python3
#coding=utf-8

import datetime
import pprint
from pymongo import MongoClient

client = MongoClient()

db = client.pythondb

new_posts = [{"_id": 1000,
               "author": "Curry",
               "text": "Another post!",
               "tags": ["bulk", "insert"],
               "date": datetime.datetime(2017, 11, 12, 11, 14)},
              {"_id": 1001,"author": "Maxsu",
               "title": "MongoDB is fun",
               "text": "and pretty easy too!",
               "date": datetime.datetime(2019, 11, 10, 10, 45)}]

posts = db.posts
result = posts.insert_many(new_posts)
print("Bulk Inserts Result is :", result.inserted_ids)
#print (post)

查询
单个文档查询
使用find_one()获取单个文档

#!/usr/bin/python3
#coding=utf-8

import datetime
from pymongo import MongoClient

client = MongoClient()

db = client.pythondb
post = {"author": "Minsu",
         "text": "This blog post belong to Minsu!",
         "tags": ["MySQL", "Oracle", "pymongo"],
         "date": datetime.datetime.utcnow()}

posts = db.posts
post_id = posts.insert_one(post).inserted_id

post = posts.find_one({"author": "Maxsu"})
print(post)
#print (post)

查询多个文档
可使用find()方法,find()返回一个Cursor实例,可以遍历返回结果。

#!/usr/bin/python3
#coding=utf-8

from pymongo import MongoClient

client = MongoClient()

db = client.pythondb

posts = db.posts
for post in posts.find():
print(post)

MongoDB就简单介绍到这里,详细MongoDB内容大家可以参考官网

本文部分参考:http://www.yiibai.com/mongodb/mongodb_python.html

原文地址:http://blog.51cto.com/linuxliu/2063966

时间: 2024-11-09 13:33:22

运维学python之爬虫中级篇(八)MongoDB的相关文章

运维学python之爬虫中级篇(五)数据存储(无数据库版)

本篇主要介绍,爬取html数据后,将html的正文内容存储为json或csv格式. 1 json格式存储 选定要爬取的网站后,我们利用之前学过的内容,如:Beautiful Soup.xpath等方式解析,来获取我们希望得到的内容. 1.1 获取数据 首先使用urllib访问页面https://www.lagou.com/zhaopin/Python/?labelWords=label获取html内容,代码如下: from urllib import request try: url = 'ht

运维学python之爬虫中级篇(六)基础爬虫

通过这么多天对爬虫的介绍, 我们对爬虫也有所了解,今天我们将引入一个简单爬虫的技术架构,解释爬虫技术架构中的几个模块,后面的爬虫也多是今天架构的延伸,只不过这个架构是简单的实现,对优化.爬取方式等不是很完善,主要为了方便大家对爬虫的理解和后面的编程. 1 基础架构和流程 简单的爬虫架构由以下几部分构成:爬虫调度器:总体协调其它几个模块的工作URL管理器:负责管理URL,维护已经爬取的URL集合和未爬取的URL集合网页下载器:对未爬取的URL下载网页解析器:解析已下载的html,并从中提取新的UR

运维学python之爬虫高级篇(六)scrapy模拟登陆

上一篇介绍了如何爬取豆瓣TOP250的相关内容,今天我们来模拟登陆GitHub. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 抓包工具:fiddler 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 分析登陆提交信息分析登陆信息我使用的是fiddler,fiddler的使用方法就不作介绍了,大家可以自行搜索,首先我们打开github的登陆页面,输入用户名密码,提交查看fiddler获取的信息,我这

运维学python之爬虫高级篇(七)scrapy爬取知乎关注用户存入mongodb

首先,祝大家开工大吉!本篇将要介绍的是从一个用户开始,通过抓关注列表和粉丝列表,实现用户的详细信息抓取并将抓取到的结果存储到 MongoDB. 1 环境需求 基础环境沿用之前的环境,只是增加了MongoDB(非关系型数据库)和PyMongo(Python 的 MongoDB 连接库),默认我认为大家都已经安装好并启动 了MongoDB 服务. 项目创建.爬虫创建.禁用ROBOTSTXT_OBEY设置略(可以参考上一篇) 2 测试爬虫效果 我这里先写一个简单的爬虫,爬取用户的关注人数和粉丝数,代码

运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250

对于scrapy我们前面已经介绍了简单的应用,今天我们用一个完整的例子,爬取豆瓣电影TOP250来做一个小的练习,把scrapy阶段做一个总结. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 2.1 需要保存的数据 首先确定我们要获取的内容,在items中定义字段,来将非结构化数据生成结构化数据,获取的内容主要包括:排名.电影名称.得分.评论人数.如下

学习《从零开始学Python网络爬虫》PDF+源代码+《精通Scrapy网络爬虫》PDF

学习网络爬虫,基于python3处理数据,推荐学习<从零开始学Python网络爬虫>和<精通Scrapy网络爬虫>. <从零开始学Python网络爬虫>是基于Python 3的图书,代码挺多,如果是想快速实现功能,这本书是一个蛮好的选择. <精通Scrapy网络爬虫>基于Python3,深入系统地介绍了Python流行框架Scrapy的相关技术及使用技巧. 学习参考: <从零开始学Python网络爬虫>PDF,279页,带目录,文字可复制: 配套

linux运维及Python运维免费公开课

适用人群:想从事linux运维及python运维开发的人员 企业网管.技术支持.linux运维人员.大中专学生 听课时间:2014年11月30日(周日)下午1:30 听课地点:北京市昌平区沙河青年创业大厦B座1519室(地铁昌平线沙河站B1口200米处) 听课内容: LINUX运维:(1.5小时) 1.软件开源的大发展趋势及如何把握这个趋势? 2.linux运维职位到底都做什么? 3.linux运维前景到底咋样? 4.到底是选择运维还是选择开发发展? 5.运维人员如何超越年薪30万,50万? 6

运维界最牛的一篇2015年总结!看后震惊了!

梦想 小时候总是会被大人问及到你长大了想做什么,写的最多的作文题目恐怕是"我的梦想",那个年代的我们被一部唤作<少林寺>的电影所引导,长大后立志成为一个大侠,劫富济贫安天下. 等到再过几年,初中时代的我们在谈及自己的梦想的时候,被从城里回来的堂哥堂姐描绘的"电脑"这个洋玩意所吸引,再到后来的电视的普及,才得以所见所谓的电脑原来张这样,这个时候梦想变成了成为和电视里那些敲电脑的人一样的人物,帅气,牛逼.再到后来才知道这个梦想可以被归结为成为一个"

阿里云合作、市场,运维派,多备份两篇软文

阿里云(合作):https://www.aliyun.com/customer/detail/dbf/ 阿里云(市场):https://market.aliyun.com/products/56014009/cmgj000276.html 运维派:http://www.yunweipai.com/ 两篇软文:http://www.yunweipai.com/archives/4362.htmlhttps://myhloli.com/duobeifen.html 众包: http://www.ma