一.絮叨
1.接上
自己挖的坑,自己填。上一篇python3APP爬虫–爬取王者荣耀英雄图片(附源码)爬取了王者荣耀英雄图片,数据量有些少,是不是不过瘾?这篇带您使用线程池爬取王者荣耀小姐姐cosplay照片,依然是APP爬虫。
准备工作和思路和上一篇大致相同,由于图片数据量大,加入了线程池,提高下载效率。
2.启下
本次要爬取王者荣耀盒子APP-辅助-精彩合集中所有图片,并且实现分类存储。
二.代码
import json
import requests
import os
from concurrent.futures import ThreadPoolExecutor
class Wzry_Cosplay_Spider(object):
def __init__(self):
self.base_dir='./wzry_cosplay_pics/'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
def get_pics(self):
n=1
while True:
url=f'http://gamehelper.gm825.com/wzry/gallery/list?pn={n}'
try:
r=requests.get(url,headers=self.headers)
json_data=json.loads(r.text)
pics_list=json_data.get('list')
if len(pics_list)!=0:
for pic in pics_list:
pic_title=pic.get('title')
pic_imgs=pic.get('thumb_img')
yield pic_title,pic_imgs
else:
break
n+=1
except:
pass
def download_pics(self,dirname,imgs):
path=self.base_dir+dirname
try:
os.makedirs(path)
except:
pass
for img in imgs:
filename=img.split('/')[-1]
r=requests.get(img,headers=self.headers)
with open(path+'/'+filename,'wb')as f:
f.write(r.content)
print(f'----------------------------\033[31;44m下载{filename}\033[0m成功----------------------------')
print(f"----------------------------\033[35;46m[{dirname}]\033[0m下载完成----------------------------")
def main():
#使用线程池,创建四个线程
pool=ThreadPoolExecutor(max_workers=4)
wzry_cosplay_spider=Wzry_Cosplay_Spider()
for pic_title,pic_imgs in wzry_cosplay_spider.get_pics():
pool.submit(wzry_cosplay_spider.download_pics,pic_title,pic_imgs)
pool.shutdown()
if __name__ == '__main__':
main()
在代码中使用了线程池,创建了四个线程,您需量力而行。
控制台一直在输出数据。
三.查看数据
好多小姐姐cosplay图片,都分别存储到了对应的文件夹中,至于您做什么,我就无权多问了。
四.总结
- 本次爬取了王者荣耀盒子的所有cosplay图片,数据量相比上一篇
有明显的增加,因此加入了线程池,创建了四条线程,并行地执行任务,大大提高了下载效率。思路、代码方面有什么不足欢迎各位大佬指正、批评!
转载:https://blog.csdn.net/a1397852386/article/details/110186836
查看评论