当前位置:   article > 正文

9.爬虫与数据库—MongoDB_爬虫和数据库

爬虫和数据库

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,是一种典型的非关系型数据库。

一、MongoDB的安装与使用

1.在mac中安装MongoDB

(1)创建mongodb数据源库

brew tap mongodb/brew

如果出现以下错误

在终端中输入以下命令 ,然后再执行brew tap mongodb/brew

git config --global --unset http.proxy

git config --global --unset https.proxy

检索可以安装的mongodb版本

brew search mongo

(2)安装mongodb

输入以下命令,将自动安装最新版的mongodb社区版

brew install mongodb-community

如果出现以下错误

系统提示需要安装gcc,输入以下命令:

brew install gcc

此时还可能会出错

系统提示要安装Command Line Tools,使用以下命令更新xcode,过程需要花费一些时间。

xcode-select --install

等软件安装好后,依次再安装gcc和mongodb就可以了,这时一般会很顺利。

正在安装gcc
正在安装mongodb

(3)检查mongodb是否安装成功

mongod --version

查看mongodb版本号,正常显示,则说明mongodb成功安装

2.在windows中安装mongodb

访问mongoDB网站下载mongodb:https://www.mongodb.com/try/download/community。这里要选择与自己的操作系统匹配的版本。如果是win10的系统可以下载最新的版本,如果是win7系统,建议下载v4.0版。

最新版只支持win10操作系统

 

win7操作系统请下载v4.0.24

 

下载好.msi文件后,双击打开,选择安装类型为Custom。 

 将安装路径修改为c:\program files\mongod,下一步。

 这个页面是对数据库服务进行初步设置。勾选“Install MongoD as a Service”。下面有两个选项,一是“Run service as Network Service user”,意思是以网络用户来运行服务;二是“Run service as a local or domain user”,意思是以本地用户或域用户运行服务。我们勾选第二个,输入本地账户的名称和密码。

系统中的账户

 

 取消勾选“Install MongoDB Compass”,这是MongoDB官方的图形化用户界面,在后面我们单独安装。

 安装好以后,我们进入到刚刚设定的安装目录中,可以看到mongodb的内容。我们将“C:\Program Files\MongoDB\bin”写入到系统的环境变量中。

 打开命令提示符窗口,输入“mongod --version”,如果正常显示mongodb的版本,则说明安装成功。

3.MongoDB的基本概念

MongoDB是一种非关系型数据库,在数据的结构上与关系型数据库不同,它是树状的,在层级关系上与SQL相似。

数据在MongoDB中是按照“库Datebase”——“集合Collections”——"文档Document"的层级关系来存储的。文档可以理解为是一个字典,集合可以理解为是包含多个字典的列表,库则是更大的包含多个列表的字典。

如果有过SQL的经验,可通过以下两者的比较来认识MongoDB的特征。

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins 表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

 在下图中有两个字典,一个字典就是一个document,也就是一行记录,字典中的每一个键就是一个field,也就是一个数据字段。索引对应每个记录的_id。

数据在MongoDB的结构

 

数据在mysql中的结构

 

4.在MongoDB sheel中操作数据库

(1)启动mongoDB

在命令提示符窗口输入mongod.exe(或者mac的终端),输入mongo.exe(没有d)连接到数据库。

 

(2)查看数据库列表

接下来在这里就可以对数据库进行操作了,例如显示数据库列表:

show dbs

 

(3)切换到指定的数据库

例如切换到spider数据库下

>use spider

switched to spider db

(4)显示当前数据库中的所有集合

show collections

(5)查看某个集合中的所有数据

 db.collectionname.find().pretty()

(6)根据指定条件来查找数据

查找“released_year”为2004的所有数据。

查找“rating_score”大于等于9.5分的数据。

其他的条件语句请参考下表:

操作格式范例RDBMS中的类似语句
等于{<key>:<value>}db.col.find({"by":"菜鸟教程"}).pretty()where by = '菜鸟教程'
小于{<key>:{$lt:<value>}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50
小于或等于{<key>:{$lte:<value>}}db.col.find({"likes":{$lte:50}}).pretty()where likes <= 50
大于{<key>:{$gt:<value>}}db.col.find({"likes":{$gt:50}}).pretty()where likes > 50
大于或等于{<key>:{$gte:<value>}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50
不等于{<key>:{$ne:<value>}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50

指定返回的内容

限定只返回满足条件的“movie_title”"actor_1_name""country"的内容,且只返回前10条数据。

db.douban_top250.find({"rating_score":{$gte:9}},{"movie_title":1,"actor_1_name":1,"country":1}).pretty().limit(10)

多条件查询

and多条件查询时,条件之间使用逗号分隔。

db.douban_top250.find({"rating_score":{$gte:9.5},"country":"美国"}).pretty()

or多条件查询,并根据指定条件排序。使用正则表达式查找文本中包含中国,并根据“rating_socre”降序排序

db.douban_top250.find({"rating_score":{$gte:9.5},$or:[{"country":"美国"},{"country":/中国/i}]}).pretty().sort({"rating_score":-1})

二、图形化管理工具—RoboMongo

1.RoboMongo的安装

官方网站https://robomongo.org/,单击“Download Robo3T + Studio 3T”.

这里根据应用系统的选择要下载版本,填入你的个人信息,点击下载即可。 

解压后可以看到文件夹中有两个安装包,一个是robo-3T,也就是robomongo,该软件完全免费;另一个是studio-3T,该软件是robomongo的升级版,是需要收费的,目前提供30天试用。我们安装robo-3T即可。

打开软件后,需要你同意用户条款,然后填写一些个人信息。

点击Create创建一个数据库,并链接它。

在Name中为你的数据库取个名字,其他地方都不需要修改,直接Save,然后点解connect。

打开后,页面的左边是Robo的数据结构。

2.RoboMongo的使用

MongoDB中的指令大多数可以在RoboMongo中正常使用。

三、PyMongo的安装与使用

1.安装PyMongo

pip install pymongo

2.初始化数据库连接

创建一个连接服务器的实例

  1. from pymongo import MongoClient
  2. client = MongoClient('localhost',27017)

3.初始化数据库

db = client.tutorial

spider是库的名称,如果没有则会新建一个名为spider的库。如果已经存在,则会直接使用这个库。

4.初始化集合

collection = db.test1

douban_top250是集合的名称,如果没有则会新建这个集合。

5.插入单条数据

使用insert(参数)方法插入数据,参数就是字典。

  1. data = {
  2. 'name':'Jim',
  3. 'old':18,
  4. 'sex':'male'
  5. }
  6. collection.insert_one(data)

6.插入多条数据

使用insert_many(参数)方法插入多条数据,参数为包含字典的列表。

  1. datas = [{
  2. 'name':'cheryl',
  3. 'old':20,
  4. 'sex':'female'
  5. },
  6. {
  7. 'name':'susan',
  8. 'old':17,
  9. 'sex':'female'
  10. }
  11. ]
  12. collection.insert_many(datas)

在robo中我们可以看到数据插入后的效果。

7.根据指定条件删除数据

删除一条数据

collection.delete_one({"name":"Jim"})

8.修改数据

单条数据修改:update_one

collection.update_one({"name":"susan"},{"$set":{"old":16}})

9.对数据进行统计

根据条件进行计数:返回下列数据中男性的数量

print(collection.count_documents({"sex":"male"}))

根据条件进行计数:返回年龄大于等于18的记录数量

print(collection.count_documents({"old":{"$gte":20}}))

10.聚合

根据某指定内容进行求和:返回所有人员年龄的总和。

print([x for x in collection.aggregate([{"$group":{"_id":None,"total":{"$sum":"$old"}}}])])

输出:[{'_id': None, 'total': 90}]

四、使用MongoDB存储管理爬虫数据

1.读取csv文件,将数据保存到mongodb中

  1. from pymongo import MongoClient
  2. import csv
  3. client = MongoClient('localhost',27017)
  4. db = client.spider
  5. collection = db.douban_top250
  6. with open('douban_top250.csv','r',encoding='utf-8') as f:
  7. datas = csv.DictReader(f)
  8. for data in datas:
  9. data['movie_rank'] = int(data['movie_rank'])
  10. data['rating_score'] = float(data['rating_score'])
  11. data['released_year'] = int(data['released_year'][:4])
  12. collection.insert_one(data)

2.在爬虫中使用mongodb存储数据

实例:爬取虎扑新闻,将爬取结果存储到mongodb中。

  1. import requests
  2. from pymongo import MongoClient
  3. def get_data(url):
  4. headers = {
  5. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
  6. }
  7. res = requests.get(url,headers=headers)
  8. datas = res.json()
  9. return datas['data']
  10. def save_to_db(data):
  11. client = MongoClient('localhost', 27017)
  12. db = client.spider
  13. collection = db.hupu_news
  14. collection.insert_many(data)
  15. if __name__ == '__main__':
  16. data_list = []
  17. for i in range(2, 3):
  18. url = 'https://www.hupu.com/home/v1/news?pageNo={}&pageSize=50'.format(i)
  19. data_list += get_data(url)
  20. save_to_db(data_list)

五、练习

1.目标网站:京东商城

2.需求:爬取京东商城的200条食品信息,包含商品名称product_name,价格price,店铺名称shop_name,并将数据存储到mongodb数据库中。

3.实现技术与提示:(1)自选采用模拟浏览器的方法或者审查真实地址的方法找到目标数据;

(2)在mongodb中建立一个名为spider的数据库,建立一个名为jd_food_info的集合,然后将数据存储到这个集合下。

4.需要提交的作业:.py文件,数据库table mode截图。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/928757
推荐阅读
相关标签
  

闽ICP备14008679号