python爬虫11--文件存储之非关系型数据库存储MongoDB

NoSQL,Not Only SQL,不仅仅是SQL,泛指非关系型数据库,基于键值对的,不需要经过SQL层的解析,数据之间没有耦合性,性能高。

非关系型数据库细分如下:

  • 键值存储数据库:Redis、Voldemort、Oracle BDB;
  • 列表存储数据库:Cassandra、HBase、Riak;
  • 文档型数据库:CouchDB、MongoDB;
  • 图形数据库:Neo4j、InfoGrid、Infinite Graph。

爬虫数据使用非关系型数据库原因:简单高效。爬虫数据可能存在某些字段提取失败或缺失,数据可能会随时调整,且数据间可能存在嵌套关系。如果用关系型数据库,需提前建表,如果数据存在嵌套关系,需进行序列化操作后才可以存储。

1.MongoDB介绍

MongoDB将数据存储为一个文档数据结构,由键值对组成 MongoDB文档类似于json对象,字段值可以包含其他文档、数组及文档数组。

 2.连接数据库

启动服务:

cd mongodb的bin文件路径----->mongod.exe --dbpath=路径

cd mongodb的bin文件路径----->mongo.exe

python中连接mongodb:

import pymongo
# client = pymongo.MongoClient(host=‘localhost‘,port=27017)    #第一种连接
client = pymongo.MongoClient(‘mongodb://localhost:27017‘)   #第二种连接
print(client)

3.指定数据库

如果数据库不存在则为创建

# db = client.test       #第一种指定
db = client[‘test‘]   #第二种指定

4.指定集合

# collection = db.user   #第一种指定
collection = db[‘user‘]    #第二种指定

5.插入数据

data1 = {‘id‘:‘001‘, ‘name‘:‘aa‘,‘age‘:15}
data2 = {‘id‘:‘002‘, ‘name‘:‘bb‘,‘age‘:16}
data3 = {‘id‘:‘003‘, ‘name‘:‘cc‘,‘age‘:14}
data4 = {‘id‘:‘004‘, ‘name‘:‘dd‘,‘age‘:14}
collection.insert_one(data1)          #插入一条数据
collection.insert_many([data2,data3,data4])   #插入多条数据

6.数据查询

6.1 find_one()和find()查找

# result = collection.find_one({‘name‘:‘aa‘})   #返回单个结果  {‘_id‘: ObjectId(‘5e1903e232a95ccef7703bda‘), ‘id‘: ‘001‘, ‘name‘: ‘aa‘, ‘age‘: 15}  _id为mongodb插入时自动添加的
results = collection.find({‘age‘:14})       #返回生成器对象
for result in results:
    print(result)

6.2 ObjectId查找

from bson.objectid import ObjectId
result = collection.find_one({‘_id‘:ObjectId(‘5e1903e232a95ccef7703bda‘)})

6.3 条件查找

results = collection.find({‘age‘:{‘$lt‘:15}})   #年龄小于15
results = collection.find({‘age‘:{‘$lte‘:15}})   #年龄小于等于15
results = collection.find({‘age‘:{‘$gt‘:15}})   #年龄大于15
results = collection.find({‘age‘:{‘$gte‘:15}})   #年龄大于等于15
results = collection.find({‘age‘:{‘$ne‘:15}})   #年龄不等于15
results = collection.find({‘age‘:{‘$in‘:[15,16]}})   #年龄在15-16之间,包含
results = collection.find({‘age‘:{‘$nin‘:[15,16]}})   #年龄不在15-16之间
for result in results:
    print(result)

6.4正则查找

results = collection.find({‘name‘:{‘$regex‘:‘^a.*‘}})   #名字以a开头的正则匹配
for result in results:
    print(result)

7.计数

result = collection.find().count()
result = collection.find({‘age‘:{‘$gt‘:14}}).count()
print(result)

8.排序

results = collection.find().sort(‘age‘,pymongo.ASCENDING)   #默认升序
results = collection.find().sort(‘age‘,pymongo.DESCENDING)   #降序

9.偏移

results = collection.find().sort(‘age‘).skip(2)  #从第三个开始
results = collection.find().sort(‘age‘).skip(2).limit(1)  #只要第三个

10.更新

collection.update_one({‘age‘:15},{‘$set‘:{‘age‘:20}})   #update_one()修改一条,‘$set"直接修改
results = collection.update_many({‘age‘:14},{‘$inc‘:{‘age‘:2}})   #update_many()修改多条,‘$inc‘累计修改
print(results.matched_count,results.modified_count)

11.删除

collection.remove({‘name‘:‘aa‘})
collection.delete_one({‘name‘:‘bb‘})
results = collection.delete_many({‘age‘:16})
print(results.deleted_count)

12.案例

# 练习:爬取豆瓣电影TOP250,电影名称,评分,推荐语信息并保存到MongoDB中
from pyquery import PyQuery as pq
import requests
import pymongo

url = ‘https://movie.douban.com/top250‘
headers = {
    ‘User-Agent‘: ‘Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/79.0.3945.88 Safari/537.36‘
}
res = requests.get(url=url,headers=headers)
doc = pq(res.text)
items = doc(‘.info‘).items()
list_all = []
for item in items:
    movies_dict = {}
    name = pq(item.find(‘.hd‘).html()).find(‘span:first-child‘).text()   #此处的find找到所有符合条件的
    score = pq(item.find(‘.star‘).html()).find(‘span:nth-child(2)‘).text()
    comment = item.find(‘.quote‘).text()
    movies_dict[‘name‘] = name
    movies_dict[‘score‘] = score
    movies_dict[‘comment‘] = comment
    list_all.append(movies_dict)

client = pymongo.MongoClient(host=‘localhost‘,port=27017)
db = client.test
collection = db.movies
for movie in list_all:
    collection.insert_one(movie)

results = collection.find()
for result in results:
    print(result)

 

原文地址:https://www.cnblogs.com/rong1111/p/12178884.html

时间: 2024-07-28 16:21:25

python爬虫11--文件存储之非关系型数据库存储MongoDB的相关文章

Python3网络爬虫实战-33、数据存储:非关系型数据库存储:MongoDB

NoSQL,全称 Not Only SQL,意为不仅仅是 SQL,泛指非关系型的数据库.NoSQL 是基于键值对的,而且不需要经过 SQL 层的解析,数据之间没有耦合性,性能非常高. 非关系型数据库又可以细分如下: 键值存储数据库,代表有 Redis, Voldemort, Oracle BDB 等. 列存储数据库,代表有 Cassandra, HBase, Riak 等. 文档型数据库,代表有 CouchDB, MongoDB 等. 图形数据库,代表有 Neo4J, InfoGrid, Inf

Python3网络爬虫实战-34、数据存储:非关系型数据库存储:Redis

Redis 是一个基于内存的高效的键值型非关系型数据库,存取效率极高,而且支持多种存储数据结构,使用也非常简单,在本节我们介绍一下 Python 的 Redis 操作,主要介绍 RedisPy 这个库的用法. 1. 准备工作 在本节开始之前请确保已经安装好了 Redis 及 RedisPy库,如果要做数据导入导出操作的话还需要安装 RedisDump,如没有安装可以参考第一章的安装说明. 2. Redis.StrictRedis RedisPy 库提供两个类 Redis 和 StrictRedi

数据存储之非关系型数据库存储----MongoDB存储

MongoDB存储----文档型数据库 利用pymongo连接MongoDB import pymongo client = pymongo.MongoClient(host='localhost', port=27017) # 或 pymongo.MongoClient('mongodb://localhost:23017/') # 默认端口为:27017 # pymongo.MongoClient()方法 指定数据库 # 指定操作test数据库# db = client.test 或 db

Python3编写网络爬虫12-数据存储方式五-非关系型数据库存储

非关系型数据库存储 NoSQL 全称 Not Only SQL 意为非SQL 泛指非关系型数据库.基于键值对 不需要经过SQL层解析 数据之间没有耦合性 性能非常高. 非关系型数据库可细分如下: 键值存储数据库: 代表有Redis.Voldemort.和Oracle BDB等. 列存储数据库:代表有Cassandra.HBase.和Riak等. 文档型数据库:代表有CouchDB.Mongodb等. 图形数据库:代表有Neo4J.InfoGrid.Infinite.Graph等. 对于爬虫的数据

大数据时代的数据存储,非关系型数据库MongoDB

在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构.然而,在信息技术爆炸式发展的今天,大数据已经成为了继云计算,物联网后新的技术革命,关系型数据库在处理大数据量时已经开始吃力,开发者只能通过不断地优化数据库来解决数据量的问题,但优化毕竟不是一个长期方案,所以人们提出了一种新的数据库解决方案来迎接大数据时代的到来——NoSQL(非关系型数据库). 为什

大数据时代的数据存储,非关系型数据库MongoDB(一)

爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构.然而,在信息技术爆炸式发展的今天,大数据已经成为了继云计算,物联网后新的技术革命,关系型数据库在处理大数据量时已经开始吃力,开发者只能通过不断地优化数据库来解决数据量的问题,但优化毕竟不是一个长期方案,所以人们提出了一种新的数据库解决方案来迎接大数据时代的到来——NoSQ

mysql介绍(关系型数据库),关系型与非关系型数据库,数据库与文件的对应关系,mysql启动与连接,修改mysql配置信息

mysql介绍 数据库是用来存储数据的仓库本质就是存储数据的socket套接字c/s架构 数据库服务端: 存放数据库的主机集群数据库客户端: 可以连接数据库任意客户端数据库管理员:DBA 数据库的基本概念 mysql:关系型数据库 关系型与非关系型数据库 关系型数据库:Mysql access SQLServer Oracle 一般用来存储长期稳定的数据 1.有表的概念 2.以表中一条条记录存储数据 非关系型数据库 :Mongodb Redis Memcache 以键值对的方式存储,快速缓存,即

python 之操作redis数据库(非关系型数据库,k-v)

数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁盘上 Redis里的数据类型有String 和hash类型,下面主要是对Redis 的一些操作. 一.String类型 r = redis.Redis(host='localhost',port=6379,db=3) r.set('nancy2','201801211505') #set数据 pri

安装MongoDB非关系型数据库

安装MongoDB非关系型数据库 MongoDB基础 技能目标 理解MongoDB数据库的基本概念 学会安装MongoDB数据库 MongoDB概述 MongoDB是一款开源的文档数据库,并且是业内领先的NoSQL数据库,用C++编写而成 MongoDB简介 MongoDB是一款跨平台.面向文档的数据库.可以实现高性能,高可用性,并且能能够轻松拓展.在高负载的情况下,添加更多节点,可以保证服务器性能 MongoDB是一个介于关系型数据库和非关系数据库之间的产品,是非关系型数据库当中功能最丰富,最