最近挺馋 某api网站 上的美图,想写个 python 爬虫把图片都爬下来
import requests
import os
# 设置保存图片的文件夹
save_dir = 'images'
os.makedirs(save_dir, exist_ok=True)
# 循环请求API,假设您要获取100张图片
for i in range(100):
# 发送API请求
response = requests.get('https://t.mwm.moe/pc/')
if response.status_code == 200:
# 解析API响应,提取图片数据
image_data = response.content
# 生成文件名,这里可以使用随机文件名或递增的文件名
file_name = f'image_{i}.jpg'
# 保存图片到本地存储
with open(os.path.join(save_dir, file_name), 'wb') as file:
file.write(image_data)
print(f'Saved {file_name}')
else:
print(f'Failed to retrieve image {i}')
print('Done')
爬下来以后发现需要图片过大,电脑加载要卡半天(
所以加入了图片转webp功能,使用的是pillow库
import requests
from PIL import Image
import os
import io
# 设置保存图片的文件夹
save_dir = 'images'
os.makedirs(save_dir, exist_ok=True)
# 循环请求API,假设您要获取100张图片
for i in range(100):
# 发送API请求
response = requests.get('https://t.mwm.moe/pc/')
if response.status_code == 200:
# 解析API响应,提取图片数据
image_data = response.content
# 生成文件名,这里可以使用随机文件名或递增的文件名
file_name = f'image_{i}.webp' # 使用.webp扩展名保存为WebP格式
# 打开JPEG图片并将其转换为WebP格式并保存
jpeg_image = Image.open(io.BytesIO(image_data))
jpeg_image.save(os.path.join(save_dir, file_name), 'webp')
print(f'Converted and saved {file_name}')
else:
print(f'Failed to retrieve image {i}')
print('Done')
事实上,因为api返回的图片是从图库来的随机图,所以有可能重复,而我不希望我下下来的图一堆都是重复的,所以为了避免重复,使用Python的hashlib库来计算每个图片的哈希值,并将哈希值用于检查是否已经保存了相同的图片
import requests
from PIL import Image
import os
import io
import hashlib
# 设置保存图片的文件夹
save_dir = 'images'
os.makedirs(save_dir, exist_ok=True)
# 用集合(set)来跟踪已保存的哈希值
saved_hashes = set()
# 循环请求API,假设您要获取100张图片
for i in range(100):
# 发送API请求
response = requests.get('https://t.mwm.moe/pc/')
if response.status_code == 200:
# 解析API响应,提取图片数据
image_data = response.content
# 计算图片数据的哈希值
image_hash = hashlib.sha256(image_data).hexdigest()
# 如果哈希值不在已保存的哈希值集合中,保存图片
if image_hash not in saved_hashes:
saved_hashes.add(image_hash)
# 生成文件名,这里可以使用随机文件名或递增的文件名
file_name = f'image_{i}.webp' # 使用.webp扩展名保存为WebP格式
# 打开JPEG图片并将其转换为WebP格式并保存
jpeg_image = Image.open(io.BytesIO(image_data))
jpeg_image.save(os.path.join(save_dir, file_name), 'webp')
print(f'Converted and saved {file_name}')
else:
print(f'Skipping duplicate image {i}')
else:
print(f'Failed to retrieve image {i}')
print('Done')
这就是终版辣
破解斗破传奇私服攻略:揭秘独家秘籍,助你畅游无阻:https://501h.com/heji/21961.html