使用requests包获取respons请求对象,通过接口获取json字符串,对字符串处理后得到图片url,再使用多线程下载
python
# 并发编程 ------ 多线程 、 多进程 、 异步编程
from concurrent.futures import ThreadPoolExecutor
import requests
# 唯一标识符
import uuid
def downLoad(url='https://image.so.com/zjl?sn=0&ch=car', page=0):
# 最大进程数
pool = ThreadPoolExecutor(max_workers=16)
spliturl = url.split('?')
for p in range(page + 1):
# 拼接页数
newUrl = spliturl[0] + '?' + f'sn={p}' + spliturl[1]
# 得到response请求对象
resp = requests.get(url=newUrl)
# 将获取的json字符串处理成字典
json_dict = resp.json()
# 获取list键对应的值
list_dict = json_dict['list']
# 获取图片url,并使用多线程下载
for i in range(len(list_dict)):
qhimg_url = list_dict[i]['qhimg_url']
# savePic(qhimg_url, getPicName('C://Users/小碧宰治/Desktop/cars'))
pool.submit(savePic, qhimg_url, getPicName('C://Users/小碧宰治/Desktop/cars'))
pool.shutdown()
def getPicName(savedir):
"""保存位置"""
return f'{savedir}/{uuid.uuid1().hex}.jpg'
def savePic(url, savedir):
"""写图片并保存"""
# 写二进制
with open(savedir, mode='wb') as file_obj:
resp = requests.get(url=url)
file_obj.write(resp.content)
downLoad()