IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python王者荣耀图片下载:队列多线程模式 -> 正文阅读

[Python知识库]python王者荣耀图片下载:队列多线程模式

import requests
import threading
from queue import Queue
from urllib import parse
import os
from urllib import  request

url_name=[]#文件夹名列表
url_link=[]#全图链列表

class Get_url():#获取url和html的内容
    def __init__(self,url,headers):
        self.url=url
        self.headers=headers

    def run(self):
        resp=requests.get(self.url,headers=self.headers)
        return resp.json()

# 生产者
class Get_link(threading.Thread):#获取图链和图链名称,文件夹名称
    def __init__(self,all_url,image_url_queue):
        super().__init__()
        self.all_url=all_url
        self.image_url_queue=image_url_queue

    def run(self):
        global url_link
        global url_name

        headers = {
            'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36'}

        # 获取全链接连表
        for pin_url in self.all_url:
            true_url=pin_url['List']
            for true_url1 in true_url:
                url_link1=[]
                for i in range(1,9):
                    true_url2=true_url1['sProdImgNo_{}'.format(i)]
                    result1 = parse.unquote(true_url2).replace('/200','/0')
                    url_link1.append(result1)
                url_link.append(url_link1)
            # print(url_link)

        # 获取全名称列表
        for name in self.all_url:
            true_name = name['List']
            url_name1 = []
            for true_name1 in true_name:
                # url_name=[]
                true_name2 = true_name1['sProdName']
                result2 = parse.unquote(true_name2)
                url_name.append(result2)
        # print(url_name)

        d=dict(zip(url_name,url_link))

        # 创建和判断目录存在
        for key in d:
            filename='../王者荣耀案例/王者荣耀高清壁纸/'+key
            is_exists=os.path.exists(filename)
            if not is_exists:
                try:
                    os.makedirs(filename)
                except NotADirectoryError:
                    print(key+'目录创建成功')
                print(key+'目录创建成功')
            else:
                print(key+'目录已存在')
                # 生产图链并存入队列
                for index, image_url in enumerate(d[key]):  # 生成图片名的数字序列
                    self.image_url_queue.put({'image_path':os.path.join(filename,f'{index+1}.jpg'),'image_url':image_url})
# 消费者
class Storage(threading.Thread):
    def __init__(self,image_url_queue):
        super().__init__()
        self.image_url_queue=image_url_queue

    def run(self):
        # headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36'}
        # m=1
        # image_obj=self.image_url_queue.get(timeout=20)
        # resp=requests.get(image_obj[1],headers=headers)
        # with open(image_obj[0]+'/'+str(m)+'.jpg','wb') as f:
        #     f.write(resp.content)
        #     print(image_obj[0]+'下载完毕!')
        #     m+=1


        while True:
            try:
                image_obj = self.image_url_queue.get(timeout=20)
                request.urlretrieve(image_obj['image_url'], image_obj['image_path'])
                print(f'{image_obj["image_path"]}下载完成')
            except:
                break


def start():
    all_url = []
    for i in range(1,3):
        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&jsoncallback=&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1637683982984'.format(i)
        headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36'}

        # 1获取地址
        get_url=Get_url(url,headers)
        pin_url=get_url.run()
        all_url.append(pin_url)

    #2建立队列类
    image_url_queue=Queue(1000)

    # 3创建生产者线程对象
    for i in range(50):
        t = Get_link(all_url,image_url_queue)
        t.start()

    # 4创建消费者线程对象
    for i in range(100):
        t = Storage(image_url_queue)
        t.start()

if __name__ == '__main__':
    start()



```python
在这里插入代码片

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:49:10  更:2021-11-26 08:50:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:41:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码