利用threading多线程爬取王者荣耀的高清壁纸
不知道有没有小伙伴跟我一样,面对Windows桌面单调的壁纸,有一种锤屏幕的冲动,下面我会以代码的形式教大家下载王者荣耀的高清壁纸
项目模块需求
- requests
- urllib
- queue
- threading
- os
- time
项目实现
- 首先我们需要导入以下模块
import requests
from urllib import request
from urllib import parse
import queue
import threading
import os
import time
- 为了防止王者荣耀的网页后台识别出爬虫,我们需要伪装成浏览器,这里我们需要在chrome的network中找到
headers
和referer
这两项
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'
}
在这个项目中我使用的是
Queue
安全队列,利用生产者和消费者模式,我定义了两个类,并继承threading.Thread
- 生产者: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)
- 消费者: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
代码块,这样即使在访问错误的情况下,程序依旧会运行下去。在
main
函数中,我们分别对王者荣耀壁纸页码队列和图片队列进行大小设置。为了快速高效的下载壁纸我们分别对
Getinfo
和Saveinfo
启用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
队列的使用,它的get
和put
这两个方法。
利用threading多线程爬取王者荣耀的高清壁纸相关推荐
- Python批量爬取王者荣耀英雄高清壁纸
Python批量爬取王者荣耀英雄高清壁纸 文章目录 Python批量爬取王者荣耀英雄高清壁纸 前言 爬虫步骤 python代码实现 总结 前言 很多喜欢玩王者的朋友很希望把王者荣耀的英雄图片拿来做壁纸 ...
- python爬取王者荣耀皮肤高清图
python爬取王者荣耀皮肤高清图 前期准备,导入模块 requests json os 进入王者荣耀官网,进入游戏壁纸页面,f12进入开发者模式,按照下图找到这个json文件,用于对图片的数据请求. ...
- 利用Scrapy框架爬取LOL皮肤站高清壁纸
利用Scrapy框架爬取LOL皮肤站高清壁纸 Lan 2020-03-06 21:22 81 人阅读 0 条评论 成品打包:点击进入 代码: 爬虫文件 # -*- coding: utf- ...
- 多线程爬取王者荣耀皮肤壁纸
今天写了个小demo,多线程爬取王者荣耀全皮肤,话不多说,直入主题. https://pvp.qq.com/web201605/herolist.shtml这个是玩王者荣耀官网上的英雄列表,这个时候一 ...
- 简单20行代码爬取王者荣耀官网1080p壁纸
简单20行代码爬取王者荣耀官网1080p壁纸 # -*- coding: utf-8 -*- # @Time : 2020/12/13 18:08 # @Author : ningfangcong i ...
- python多线程爬取王者荣耀高清壁纸过程
多线程与爬虫 目标url json中查找url 访问url 读取json 查看json的list数组 全部图片 粗暴的单线程获取 多线程执行 目标url 查看http://pvp.qq.com/web ...
- 【python】王者荣耀全英雄高清壁纸爬虫共467M(多线程)
文章目录 1. 成果展示 2. 单张预览 3. 软件下载 4. 壁纸下载 5. 进度打印 6. 目标网址 7. 依赖模块 8. 完整代码 9. 代码剖析 10. 打包教程 10.1. 打包前的准备 1 ...
- 静态网页爬取:批量获取高清壁纸
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- 爬虫入门(一)——静态网页爬取:批量获取高清壁纸
应老师分的方向,昨天开始自学入门爬虫了 虽然实现了一个比较简单的小爬虫,自己还是非常兴奋的,还是第一次实现 真的好开心 本来想爬pexel上的壁纸,然而发现对方的网页不知道设置了什么,反正有反爬虫机 ...
- python 批量打开网页并截图_Python静态网页爬取:批量获取高清壁纸
前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...
最新文章
- 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境
- 2020-10-26关于虚拟机中的HWADDR和MACADDR地址
- 工作中不要为了用系统而用系统
- asp开发中存储过程应用全接触 _asp技巧
- 图解系列之垃圾收集标记整理算法
- thinkphp require php 5.3.0 !,给thinkphp3.2用上composer
- bzoj1115: [POI2009]石子游戏Kam
- 解决hibernate中的懒加载(延迟加载)问题
- 【重识 HTML + CSS】网页基础知识、基本 HTML 标签
- ISNULL与CASE函数
- 数字证书(Certificate)
- 华为机试:提取不重复的整数
- 开源java微博系统_ThinkSNS 开源微博系统 v4.6.0.0
- SODB、RBSP和EBSP
- 各种网络协议的类型、优缺点、作用
- 【转载】100个思维模型(不一定都适用,各取所需)
- 超强可视化图表工具:Smartbi!!
- 三、Reminders 读写
- 银屑病与大肠相关机制(调研手稿五)
- office电子书_掌阅推出首款彩屏电子书阅读器,用它看漫画体验到底如何?
热门文章
- 吉他的分类——新手学哪种吉他更好上手?
- 360 企业安全推出的 SD-WAN 会抢谁的生意?| 访谈
- 来杭州云栖大会,全面了解企业如何实现云上IT治理
- 使用声卡录制编辑收藏自己喜欢的音乐
- Go语言学习系列 -- 大道至简—GO语言最佳实践​​​​​​​
- SpringMvc中的@RequestMapping value 6个基本用法
- button图片与文字的布局
- 3d游戏设计读书笔记三
- []趋势科技2015校园招聘
- Mac spotlight无法搜索的解决方法