Mongodb可以使用BSon格式来保存大小不超过16M的二进制文件,BSon是Binary JSON的简称,是一种类Json的一种二进制形式的存储格式
一、Pymongo使用Bson存储图片
假设目标图片如下
url_="https://img1.baidu.com/it/u=1944362881,3052948923&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=500"
(一)要用到的库
pymongo是Python中用来操作MongoDB的一个库,需要用到Bson中的binary函数将图片转换为二进制数据流,所以两个库需要提前下载
pip install pymongo
pip install bson
另外还需要requests进行数据请求的库
(二)爬取图片
该图片获取方式为get请求方式,代码如下
import requests
url_="https://img1.baidu.com/it/u=1944362881,3052948923&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=500"
headers_1 = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
"Referer":"https://image.baidu.com/"
}
responses_ = requests.get(url_,headers_1)
data = responses_.content
#用content返回二进制数据
#此时也可以直接将图片保存到本地
out = open('E:/python/爬到的图片/test5.jpg', 'wb')
out.write(data)
out.close()
#保存路径自己决定
#保存文件的方式和以下效果是一样的
"""
with open('E:/python/爬到的图片/test5.jpg', 'wb') as f:
f.write(data)
f.close()
"""
(三)保存到mongodb中
需要与数据库建立链接,并以Bson格式存入图片
from pymongo import MongoClient
from bson import binary
# 连接带有密码认证的Mongodb,格式如下:
# mongodb://用户名:密码@服务器地址/数据库名
sin = MongoClient('mongodb://username:password@192.168.1.102:8017/img')
# 使用名为img的数据库
db = sin['img']
# 使用名为baidu的集合
users = db['baidu']
# 先用字典存好Bson格式的图片数据
dict_ = {}
dict_["imagecontent"] = binary.Binary(data)
# 将要保存的字典放入列表中,通过列表的形式存入数据库
list_data = []
list_data.append(dict_)
users.insert_one(list_data)
print("保存成功!!!")
二、读取显示mongodb数据库中保存的图片
(一)读取mongodb中的图片数据
res= baidu.find()
# 读出来的res是一个列表,里面有一个图片数据的字典
data = res[0]['imagecontent']
# data为二进制图片数据
(二)读取到的数据保存到本地
按通用方法保存即可
with open('E:/python/爬到的图片/test5.jpg', 'wb') as f:
f.write(data)
得到本地图片