今天在某搜索网站抓取图片时,最终锁定具体地址之后,通过Request.get请求后得到图片的字节流。
b'RIFF\x90C\x00\x00WEBPVP8 \x84C\x00\x00\x90\xca\x01\x9d\x01*\xf4\x01q\x02>......
通过以下代码成功获得原始大小图片。
# 使用jsonpath类来解析地址的json数据
img_urls = jsonpath.jsonpath(response, '$..thumbURL')
#print(img_urls)
for img_url in img_urls:
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
'content-type': 'image/webp',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Accept-Ranges': 'bytes',
'Accept-Encoding': 'gzip, deflate, br'
}
res = requests.get(img_url, headers=headers).content
# 将bytes结果转化为字节流
byte_stream = BytesIO(res)
# 使用图像库Image打开Byte字节流数据
Img = Image.open(byte_stream)
# 创建一个空的Bytes对象
imgByte = io.BytesIO()
# PNG就是图片格式,我试过换成JPG/jpg都不行
Img.save(imgByte, format='PNG')
# 这个就是保存的图片字节流
imgByte = imgByte.getvalue()
# 使用UUID给图片命名
index = uuid.uuid1()
if not os.path.exists(r'./{}'.format('images')):
os.mkdir(r'./{}'.format('images'))
with open(r'./{}/{}.jpg'.format('images', index), 'wb') as f:
f.write(imgByte)
print(r'***正在下载: {}.jpg'.format(index))