不知道有没有小伙伴跟我一样,面对Windows桌面单调的壁纸,有一种锤屏幕的冲动,下面我会以代码的形式教大家下载王者荣耀的高清壁纸

项目模块需求

  • requests
  • urllib
  • queue
  • threading
  • os
  • time

项目实现

  1. 首先我们需要导入以下模块
import requests
from urllib import request
from urllib import parse
import queue
import threading
import os
import time
  1. 为了防止王者荣耀的网页后台识别出爬虫,我们需要伪装成浏览器,这里我们需要在chrome的network中找到headersreferer这两项
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36','referer':'https://pvp.qq.com/web201605/wallpaper.shtm'
}
  1. 在这个项目中我使用的是Queue安全队列,利用生产者和消费者模式,我定义了两个类,并继承threading.Thread

    1. 生产者:Getinfo
    class Getinfo(threading.Thread):
    def __init__(self,page_queue,image_queue,*args,**kwargs):super(Getinfo, self).__init__(*args,**kwargs)self.page_queue = page_queueself.image_queue = image_queue
    @staticmethod
    def extract_images(data):images = []for x in range(1, 9):image_urls = parse.unquote(data['sProdImgNo_%d' % x]).replace('200', '0')images.append(image_urls)return imagesdef run(self) -> None:while not self.page_queue.empty():page_url = self.page_queue.get()resp = requests.get(page_url,headers=headers)datas = resp.json().get("List")for data in datas:img_urls = Getinfo.extract_images(data)name = parse.unquote(data['sProdName']).replace('1:1','').strip()dir_path = os.path.join("image",name)if not os.path.exists(dir_path):os.mkdir(dir_path)for index,img_url in enumerate(img_urls):self.image_queue.put({"name":name,"img_url":img_url,"index":index})print("%s线程执行完成"%threading.current_thread().name)
    
    1. 消费者:Saveinfo
    class Saveinfo(threading.Thread):
    def __init__(self,page_queue,image_queue,*args,**kwargs):super(Saveinfo, self).__init__(*args,**kwargs)self.page_queue = page_queueself.image_queue = image_queuedef run(self) -> None:while True:try:img_obj = self.image_queue.get(timeout=30)dir_name = img_obj.get("name")img_url = img_obj.get("img_url")index = img_obj.get("index")dir_path = os.path.join("image",dir_name)try:request.urlretrieve(img_url,os.path.join(dir_path, "{}.jpg".format(index+1)))print(os.path.join(dir_path,"{}.jpg".format(index+1)+"下载完成!"))except Exception as e:print("="*30)print(e)print(img_url)print("="*30)except queue.Empty as e:print(e)time.sleep(0.1)continue
    

    在图片的存储中,我们需要套用两个try-except代码块,这样即使在访问错误的情况下,程序依旧会运行下去。

  2. main函数中,我们分别对王者荣耀壁纸页码队列和图片队列进行大小设置。

  3. 为了快速高效的下载壁纸我们分别对GetinfoSaveinfo启用8个线程。


def main():page_queue = queue.Queue(21)image_queue = queue.Queue(1000)for x in range(21):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={}&iOrder=0&iSortNumClose=1&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1584692023502'.format(x)page_queue.put(page_url)for x in range(8):th = Getinfo(page_queue,image_queue,name="数据线程%d"%x)th.start()for x in range(8):th = Saveinfo(page_queue,image_queue,name="数据线程%d"%x)th.start()if __name__ == "__main__":main()

总结:

以上就是我为大家分享的多线程下载文件的方式,以下载王者荣耀壁纸的形式进行说明。文章的重点是Queue队列的使用,它的getput这两个方法。

利用threading多线程爬取王者荣耀的高清壁纸相关推荐

  1. Python批量爬取王者荣耀英雄高清壁纸

    Python批量爬取王者荣耀英雄高清壁纸 文章目录 Python批量爬取王者荣耀英雄高清壁纸 前言 爬虫步骤 python代码实现 总结 前言 很多喜欢玩王者的朋友很希望把王者荣耀的英雄图片拿来做壁纸 ...

  2. python爬取王者荣耀皮肤高清图

    python爬取王者荣耀皮肤高清图 前期准备,导入模块 requests json os 进入王者荣耀官网,进入游戏壁纸页面,f12进入开发者模式,按照下图找到这个json文件,用于对图片的数据请求. ...

  3. 利用Scrapy框架爬取LOL皮肤站高清壁纸

    利用Scrapy框架爬取LOL皮肤站高清壁纸  Lan   2020-03-06 21:22   81 人阅读  0 条评论 成品打包:点击进入 代码: 爬虫文件 # -*- coding: utf- ...

  4. 多线程爬取王者荣耀皮肤壁纸

    今天写了个小demo,多线程爬取王者荣耀全皮肤,话不多说,直入主题. https://pvp.qq.com/web201605/herolist.shtml这个是玩王者荣耀官网上的英雄列表,这个时候一 ...

  5. 简单20行代码爬取王者荣耀官网1080p壁纸

    简单20行代码爬取王者荣耀官网1080p壁纸 # -*- coding: utf-8 -*- # @Time : 2020/12/13 18:08 # @Author : ningfangcong i ...

  6. python多线程爬取王者荣耀高清壁纸过程

    多线程与爬虫 目标url json中查找url 访问url 读取json 查看json的list数组 全部图片 粗暴的单线程获取 多线程执行 目标url 查看http://pvp.qq.com/web ...

  7. 【python】王者荣耀全英雄高清壁纸爬虫共467M(多线程)

    文章目录 1. 成果展示 2. 单张预览 3. 软件下载 4. 壁纸下载 5. 进度打印 6. 目标网址 7. 依赖模块 8. 完整代码 9. 代码剖析 10. 打包教程 10.1. 打包前的准备 1 ...

  8. 静态网页爬取:批量获取高清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  9. 爬虫入门(一)——静态网页爬取:批量获取高清壁纸

    应老师分的方向,昨天开始自学入门爬虫了 虽然实现了一个比较简单的小爬虫,自己还是非常兴奋的,还是第一次实现  真的好开心 本来想爬pexel上的壁纸,然而发现对方的网页不知道设置了什么,反正有反爬虫机 ...

  10. python 批量打开网页并截图_Python静态网页爬取:批量获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

最新文章

  1. 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境
  2. 2020-10-26关于虚拟机中的HWADDR和MACADDR地址
  3. 工作中不要为了用系统而用系统
  4. asp开发中存储过程应用全接触 _asp技巧
  5. 图解系列之垃圾收集标记整理算法
  6. thinkphp require php 5.3.0 !,给thinkphp3.2用上composer
  7. bzoj1115: [POI2009]石子游戏Kam
  8. 解决hibernate中的懒加载(延迟加载)问题
  9. 【重识 HTML + CSS】网页基础知识、基本 HTML 标签
  10. ISNULL与CASE函数
  11. 数字证书(Certificate)
  12. 华为机试:提取不重复的整数
  13. 开源java微博系统_ThinkSNS 开源微博系统 v4.6.0.0
  14. SODB、RBSP和EBSP
  15. 各种网络协议的类型、优缺点、作用
  16. 【转载】100个思维模型(不一定都适用,各取所需)
  17. 超强可视化图表工具:Smartbi!!
  18. 三、Reminders 读写
  19. 银屑病与大肠相关机制(调研手稿五)
  20. office电子书_掌阅推出首款彩屏电子书阅读器,用它看漫画体验到底如何?

热门文章

  1. 吉他的分类——新手学哪种吉他更好上手?
  2. 360 企业安全推出的 SD-WAN 会抢谁的生意?| 访谈
  3. 来杭州云栖大会,全面了解企业如何实现云上IT治理
  4. 使用声卡录制编辑收藏自己喜欢的音乐
  5. Go语言学习系列 -- 大道至简—GO语言最佳实践​​​​​​​
  6. SpringMvc中的@RequestMapping value 6个基本用法
  7. button图片与文字的布局
  8. 3d游戏设计读书笔记三
  9. []趋势科技2015校园招聘
  10. Mac spotlight无法搜索的解决方法