在学习爬虫时,遇到需要保存数据的情况,虽然可以直接保存到本地,但是遇到大量数据,就比较麻烦,所以我学习了MongoDB的使用,MongoDB是一种非关系型数据库,数据以键值存贮,类似于JSON格式。
1.下载相关链接
下载对应版本的安装包进行傻瓜式安装
注意:安装目录不得有空格
2.配置
将目录放入环境变量
在安装目录下的data目录中创建db文件夹
3.使用
在cmd中输入 mongod --dbpath db文件位置
然后新开一个cmd运行 mongo
即可运行
配置自动
在mongoDB目录下新建config文件
进行设定
##数据文件
dbpath=D:\mongonDB\data
##日志文件
logpath=D:\mongonDB\log\mongoDB.log
##错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
logappend=true
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#端口号 默认为27017
port=27017
在cmd下安装(提前将mongo放入path)
安装成功
可以在浏览器中输入http://localhost:27017 来查看是否成功
可以参考https://www.cnblogs.com/liuzhiying/p/5915741.html
使用
from pymongo import MongoClient
import csv
settings = {
"ip":'127.0.0.1', #ip
"port":27017, #端口
"db_name" : "mydb", #数据库名字,没有则自动创建
"set_name" : "test_set" #集合名字,没有则自动创建
}
class MyMongoDB(object):
def __init__(self):
try:
self.conn = MongoClient(settings["ip"], settings["port"])
except Exception as e:
print(e)
self.db = self.conn[settings["db_name"]]
self.my_set = self.db[settings["set_name"]]
#插入
def insert(self,dic):
self.my_set.insert(dic)
print("插入成功")
#更新
def update(self,dic,newdic):
self.my_set.update(dic,newdic)
print("更新成功")
#删除
def delete(self,dic):
self.my_set.remove(dic)
print("删除成功")
#查找
def dbFind(self,dic):
data = self.my_set.find(dic)
for result in data:
print(result)
print("查找成功")
#查找全部
def findAll(self):
# 查询全部
for i in self.my_set.find():
print(i)
if __name__ == "__main__":
dic = {"name": "tom", "age": 18,"gender":"male"}
dic1 = {"name": "sam", "age": 18,"gender":"male"}
mongo = MyMongoDB()
mongo.insert(dic)
mongo.insert(dic1)
mongo.findAll()
mongo.update({"name": "tom"}, {"$set": {"age": "25"}})
mongo.dbFind({"gender": "male"})
# mongo.delete({"gender":"male"})
# mongo.delete({"name": "tom"})
mongo.findAll()
# 将数据写入到CSV文件中
with open(f"test.csv", "w", newline='') as csvfileWriter:
writer = csv.writer(csvfileWriter)
# 先写列名
# 写第一行,字段名
fieldList = [
"_id",
"name",
"age",
"gender",
]
writer.writerow(fieldList)
allRecordRes = mongo.my_set.find()
# 写入多行数据
for record in allRecordRes:
print(f"record = {record}")
recordValueLst = []
for field in fieldList:
if field not in record:
recordValueLst.append("None")
else:
recordValueLst.append(record[field])
try:
writer.writerow(recordValueLst)
except Exception as e:
print(f"write csv exception. e = {e}")