一个多线程素材下载爬虫,实现多线程素材下载,包含素材包rar,素材图及素材描述,应用了经典的生产者与消费者模式,不过数据没有下载全,容易出现卡死的问题,期待后期能够解决相关问题,可以算是一个半成品,供大家参考和学习,有更好的多线程解决方案也可以交流!
几个关键点:
1.素材图片的获取
素材图存在不少情况,无图,单图,多图等都有可能存在
xpath获取图片
imgs = req.xpath('//div[@class="contentinfo"]/table//@src')
条件判断,看是否存在图片
if imgs:
遍历获取图片
for img in imgs:
图片后缀的获取
suffix = os.path.splitext(img)[1]
2.是否能够下载,素材是否有下载权限
如果能够下载,获取到下载相关数据,下载路径链接以及素材包名,不能下载则返回为空
if int(req.xpath('//div[@class="download"]/dl[@class="downlink"]/dd[1]/b/text()')[0]) == 0:
down_url = req.xpath('//div[@class="download"]/dl[@class="downlink"]/dt/li/a/@href')[0]
down_name = f'{h2}/{h2}.rar'
down_data=down_url, down_name
print(down_data)
else:
down_data=[]
3.队列的使用,老生常谈
队列只能传递一个参数!!!