Python爬虫 #016 MongoDB数据库
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
1. MongoDB简介
-
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
-
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
-
对于数据量大,写入操作频繁,对事务性要求不高的数据,适合使用 MongoDB来实现数据的存储
2. MongoDB安装
2.1 下载
-
注:直接使用浏览器下载速度很慢,建议使用其他下载软件下载(比如:迅雷)

2.2 安装
-
文件下载完之后,直接双击运行:


-
这一步要选择“Custom”,下一步设置安装路径:

-
修改安装路径:
-
注:安装路径不要有空格!比如:D:\Program Files\MongoDB\Server\4.0 中的 “Program Files” 不符合!




-
这一步,取消勾选安装Compass,不然会等待很久很久。我等了一个小时也没安装完。猜测是安装过程中会去官网下载compass的安装文件,下载速度很慢
-
compass 官网下载地址:https://downloads.mongodb.com/compass/mongodb-compass-community-1.18.0-win32-x64.msi,下载后直接安装即可



-
如果安装了杀毒软件,后面会弹出提示框,允许即可:

-
这一步选择“Ignore”,忽略即可,最后点击finish完成安装


-
安装完之后进入安装目录的bin文件夹下,可看到以下文件:
mongo.exe是客户端,mongod.exe是服务端
2.3 配置环境
-
设置环境变量:将安装路径下的bin文件夹的目录添加在环境变量中

-
启动服务:
启动mongodb服务,需要指定数据存储的路径(dbpath),在D:\MongoDB 目录中创建文件夹data
以管理员身份运行cmd,执行代码:
mongod --dbpath D:\MongoDB\data
-
连接mongodb:
上面启动服务窗口不要关 管理员身份新开一个窗口,执行命令:
mongo,最下面有小三角>表示已连接成功!
3. 将MongoDB制作成windows服务
-
创建配置文件:
在mongodb的安装路径(我的是 D:\MongoDB),创建文件 mongod.cfg ,及log文件夹,在log文件夹中创建mongod.log文件(文件路径 和文件名可随意取)
-
在mongod.cfg写入以下内容(后缀改为.txt再写入内容,记得最终后缀改为 .cfg)
logpath=D:\MongoDB\log\mongod.log # 日志路径 dbpath=D:\MongoDB\data # 数据存放路径 -
Cmd中管理员身份运行如下代码:
安装mongodb服务:
mongod --config "D:\MongoDB\bin\mongod.cfg" --install启动 mongodb:
net start mongodb关闭 mongodb:
net stop mongodb如图即表示配置成功:

-
MongoDB常用操作
先启动mongoDB
show dbs # 查看所有数据库 use dbname # 进入dbname数据库, db.framename.find() # 查看当前数据库(dbname),中表单(framename)的内容示例:记得使用完后关闭数据库

4. Python操作MongoDB
4.1 增
import pymongo
# 获取连接mongodb的对象,127..为mongodb地址(此处为本机),port为mongodb端口号
## 需要先启动mongodb服务
client = pymongo.MongoClient("127.0.0.1", port=27017)
# 获取数据库(object为数据库,如果没有该数据库,则自动创建)
db = client.object
# 获取数据库中的集合
collection = db.data
# 写入数据
## 写入一条数据
# collection.insert_one({'str':'aaa'})
## 写入多条,注意要用到 []
collection.insert_many([{'str':'aaa','id':'1'}, {'str':'bbb','id':'2'}, {'str':'ccc','id':'3'}])
4.2 删
import pymongo
# 连接
client = pymongo.MongoClient("127.0.0.1", port=27017)
# 获取数据库(object是已有的数据库)
db = client.object
# 打开数据库集合
collection = db.data
# 删一条数据
# collection.delete_one({'id':'2'})
# 删多条数据
collection.delete_many({'str':'ccc'})
4.3 改
import pymongo
client = pymongo.MongoClient("127.0.0.1", port=27017)
db = client.object
collection = db.data
# 修改一条数据,前面的{..}为被修改的数据,后面的{...}为修改后
# collection.update_one({'id':'3'},{"$set":{'id':'4'}})
# 修改多条,我的集合中有很多bbb
collection.update_many({'str':'bbb'},{"$set":{'str':'BBB'}})
4.4 查
import pymongo
# 连接
client = pymongo.MongoClient("127.0.0.1", port=27017)
# 获取数据库(object是已有的数据库)
db = client.object
# 打开数据库集合
collection = db.data
# 根据条件查一条数据,
# result = collection.find_one({'id':'3'})
# print(result)
# 查多条数据
result = collection.find()
for i in result:
print(i)
5. 实战案例
5.1 豆瓣Top250电影信息
import requests
from lxml import etree
import time
import pymongo
client = pymongo.MongoClient("127.0.0.1", port=27017)
db = client.douban
collection = db.data
data_list = []
a = 0
fp = open(r'C:\Users\ASUS PC\Desktop\movies.txt',mode='a',encoding='utf-8')
for i in range(10):
url = 'https://movie.douban.com/top250?start=' + str(a) +'&filter='
print(url)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3730.400 QQBrowser/10.5.3805.400'
}
response = requests.get(url, headers = headers)
data = response.text
html = etree.HTML(data)
movies = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
# print(len(movies))
for movie in movies:
# 每次循环都会被清空,(每获得一部电影信息就清空)
data_dict = {}
# 标题,有的标题只有中文名
titles = movie.xpath('./div/div[2]/div[1]/a/span[@class="title"]')
if len(titles) == 2:
ch_title = titles[0].text
en_title = titles[1].text.replace('/', '')
else:
# 没有中文名,英文名设为None
ch_title = titles[0].text
en_title = "无"
# 排名
rank = movie.xpath('.//em')[0].text
# 评分
grade = movie.xpath('.//span[@class="rating_num"]')[0].text
# 评价人数
evaluate = movie.xpath('.//div[@class="star"]/span[4]')[0].text
# 链接
href = movie.xpath('.//div[@class="hd"]/a/@href')[0]
# 一句话简介(第246条没有)
try:
line = movie.xpath('.//span[@class="inq"]')[0].text
except:
line="无"
# print(line)
# 电影信息
message = movie.xpath('.//div[@class="bd"]/p')[0].text.strip()
data_dict={"排名":rank,"评分":grade,"评价人数":evaluate,"电影中文名":ch_title,"电影英文名":en_title,"链接":href,"in a word":line,"信息":message}
data_list.append(data_dict)
a += 25
time.sleep(2)
fp.close()
print(data_list)
collection.insert_many(data_list)
print("写入数据库成功")
本文来自博客园,作者:{枫_Null},转载请注明原文链接:https://www.cnblogs.com/fengNull/articles/16657552.html

浙公网安备 33010602011771号