下面的代码是采用多线程的生产者消费者模式,下载速度比之前文章的普通下载快一点。
普通下载的链接:python爬虫–王者荣耀高清壁纸下载

代码在下载方面是没有问题的,可以直接运行,就是在收集打不开链接的图片信息时候会出现点问题,但是不影响主要功能的使用。

import requests
from urllib import parse
from urllib import request
import osimport threading
import queue
# 用来存放无法下载的链接
un_download = []# 设置请求头
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36','referer': 'https://pvp.qq.com/web201605/wallpaper.shtml'
}# 生产者
class Producer(threading.Thread):def __init__(self,page_queue,image_queue,*args,**kwargs):super(Producer,self).__init__(*args,**kwargs)self.page_queue = page_queueself.image_queue = image_queuedef run(self) -> None:file_num = 0while not self.page_queue.empty():page_url = self.page_queue.get()resp = requests.get(page_url, headers=headers)result = resp.json()datas = result['List']for data in datas:image_urls = exact_image(data)image_name = parse.unquote(data['sProdName']).replace("1:1", "").strip()# 存放图片的文件夹名dir_path = os.path.join("image", image_name)if os.path.exists(dir_path):# 已存在的文件夹重复,就在新的文件夹名后加上2dir_path = dir_path+'2'os.mkdir(dir_path)else:os.mkdir(dir_path)for index,image_url in enumerate(image_urls):self.image_queue.put({"image_url":image_url,"image_name":image_name,"image_path":os.path.join(dir_path,"%d.jpg"%(index))})# 消费者
class Consumer(threading.Thread):def __init__(self,image_queue,*args,**kwargs):super(Consumer,self).__init__(*args,**kwargs)self.image_queue = image_queuedef run(self) -> None:while True:try:image_obj = self.image_queue.get(timeout=10)image_url = image_obj.get("image_url")image_path = image_obj.get("image_path")image_name = image_obj.get("image_name")download(image_url,image_name,image_path)except:break# 收集打不开链接的图片信息(将200替换成0的链接)
def un_download_url(image_name,image_url):un_download_info = {}un_download_info['name'] = image_nameoriginal_url = image_url.replace('/0','/200')un_download_info['original_url'] = original_urlun_download_info['curr_url'] = image_urlreturn un_download_info# 获取图片链接
def exact_image(data):image_urls = []for x in range(1,9):# 解析获取到的链接,高清的图片末尾是/0,所以要将200替换成0,防止url中间有200数值,所以用'/0'替换'/200'image_url = parse.unquote(data['sProdImgNo_%d'%x]).replace('/200', '/0')# image_url = parse.unquote(data['sProdImgNo_%d'%x])image_urls.append(image_url)return image_urls# 下载图片
def download(image_url,image_name,image_path):try:request.urlretrieve(image_url, image_path)print("%s下载完成!" % (image_name + image_url))except Exception as e:# 收集打不开的链接信息un_download_info = un_download_url(image_name, image_url)un_download.append(un_download_info)def main():page_queue = queue.Queue(22)image_queue = queue.Queue(10000)for x in range(0,22):page_url = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page={page}&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1587884222349'.format(page = x)page_queue.put(page_url)# 创建3个生产者线程for x in range(3):th = Producer(page_queue,image_queue,name="生产者%d号"%x)th.start()# 创建5个消费者线程for x in range(5):th = Consumer(image_queue,name="消费者%d号"%x)th.start()if __name__ == '__main__':main()print(un_download)


python爬虫--王者荣耀高清壁纸下载(多线程)相关推荐

  1. python手机壁纸超清_Python爬虫-王者荣耀高清壁纸下载

    绪论 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.python是一种跨平台的计算机程序设计语言.是一种 ...

  2. python爬虫王者荣耀高清壁纸

    # run.py import re, os, time, json, requests from urllib.parse import unquote import concurrent.futu ...

  3. 爬虫 | 王者荣耀高清壁纸-多线程

    # CY3761 | 2021-11-04 18:23 import json import os import queue import time import urllibimport reque ...

  4. Python多线程爬虫之二:爬取王者荣耀高清壁纸(多线程)

    一.项目分析 1.查询爬取网址 robots 权限 1.王者荣耀官网:https://pvp.qq.com/ 2.访问王者荣耀官网 rbots 权限: https://pvp.qq.com/robot ...

  5. python爬虫王者荣耀高清皮肤大图背景故事通用爬虫

    wzry-spider python通用爬虫-通用爬虫爬取静态网页,面向小白 基本上纯python语法切片索引,少用到第三方爬虫网络库 这是一只小巧方便,强大的爬虫,由python编写 主要实现了: ...

  6. 爬虫 | 王者荣耀高清壁纸-单线程

    # CY3761 | 2021-11-04 11:45# 把请求事务等封装成函数 一步步进行 import json import os import time import urllib.parse ...

  7. 【第1篇】Python爬虫实战-王者荣耀高清壁纸下载

    目标网址:https://pvp.qq.com/web201605/wallpaper.shtml 目录 1.页面分析 2.程序源码 3.结果展示 1.页面分析 通过F12打开浏览器控制台,刷新一下页 ...

  8. python爬虫练习高清壁纸【王者荣耀高清壁纸】python爬虫

    python爬虫练习高清壁纸[王者荣耀高清壁纸] 仅做练习使用,各位小伙伴不用乱来!!! 现成的代码,直接拿走研究,已经精简了自行美化 页面自己去分析分析 ,学习效果更佳. import reques ...

  9. python爬取王者_python 爬取王者荣耀高清壁纸

    一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 预览一下桌面吧: 是不是看着这样的桌面也很带感,_ (学会这个技术,你可以爬取其他网站的类似图片 ...

最新文章

  1. 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
  2. Linux怎么互相ping通,主机+虚拟机Ubuntu+开发板互相ping通
  3. 【Linux】一步一步学Linux——虚拟机简介和系统要求(04)
  4. 运行QQ出现initialization failure 0x0000000c错误和浏览器上不了网
  5. 编程是一门实践性的科学
  6. Centos下载地址
  7. Tensorflow 循环神经网络03 LSTM长短时记忆神经网络
  8. narwal无法连接机器人_库卡机器人控制系统主机出现MFC3故障维修
  9. python第四周测试答案_Python程序开发第四周作业
  10. Python面向对象编程:数据封装、继承和多态
  11. 51单片机:74LS138译码实验
  12. 单层感知器神经网络matlab,MATLAB神经网络——单层感知器
  13. 可悲、可叹、可怜的TD-sdma
  14. 关于梅花雪 MzTreeView2.0 checkbox 的用法
  15. 详谈利用系统漏洞及mysql提权
  16. 用Java输出高频词_编程高阶用法--开发者高频词汇
  17. 感受Java的魅力——基于Java二维数组和if语句编制的税后工资计算方法
  18. android 支付选择按钮,微信支付新增“确认”按钮,更安全还是更麻烦?
  19. 2019年新年书单 |不可错过的区块链好书 请查收
  20. 华为p40会不会有鸿蒙系统,华为p40是不是鸿蒙系统

热门文章

  1. ROS turtlebot_follower :让机器人跟随我们移动
  2. 微信小程序 - 自定义组件中类似页面 onShow 的页面显示就触发的生命周期钩子函数(页面回退时更新数据常用, 例如回退页面更新子组件数据, 回退更新子组件中 data 内容)
  3. Spring Cloud Alibaba学习记录
  4. 福清龙华职业中专计算机应用学校什么,福建省福清龙华职业中专学校招生专业|福建省福清龙华职业中专学校有哪些专业...
  5. 仿造网易云音乐轮播图
  6. LORA无线远传水表适者生存
  7. 关于网络性能的一些指标
  8. 宇宙物演进程——外星人去哪了游戏代码(Python实现)
  9. 民办三本,我从3K到15K的一年
  10. Java面试题大全带答案110道(持续更新)