表情包的同步异步下载

同步下载

from lxml import etree
import requests
from urllib import request #保存图片
import os
import re

def parse_page(url):
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
    }
    response = requests.get(url=url,headers=headers).text
    tree = etree.HTML(response)
    images =tree.xpath(‘//div[@class="page-content text-center"]//img[@class!="gif"]‘)
    for img in images:
        # 拿到img标签 但是img里的src显示的不是真正的图片,真正的图片在data-orginal里面(关键点)
        # print(etree.tostring(img))  # 查看img的html中样式
        img_url = img.get("data-original")  #获取到所有图片
        # get可以获取标签属性的某一个值  (关键点)

        pic_name = img.get("alt")
        pic_name = re.sub(r"[\??\.,。 !!]"," ",pic_name)
        # 获取后缀名
        suffix = os.path.splitext(img_url)[1]
        filename = pic_name + suffix
        # print(filename)
        request.urlretrieve(img_url,‘images/‘+filename)

def main():
    for x in range(1,3): # 获取 1-3页
        url = ‘http://www.doutula.com/photo/list/?page=%d‘ % x
        parse_page(url)

if __name__ == ‘__main__‘:
    main()

表情包的异步下载

from lxml import etree
import requests
from urllib import request #保存图片
import os
import re
from queue import Queue
import threading

class Producer(threading.Thread):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
    }
    def __init__(self,page_queue,img_queue,*args,**kwargs):
        super(Producer, self).__init__(*args,**kwargs)
        self.page_queue = page_queue
        self.img_queue = img_queue

    def run(self):
        while True:
            if self.page_queue.empty(): # 如果page队列中没有url就退出
                break
            url = self.page_queue.get()
            self.parse_page(url)

    def parse_page(self,url):
        response = requests.get(url=url,headers=self.headers).text
        tree = etree.HTML(response)
        images =tree.xpath(‘//div[@class="page-content text-center"]//img[@class!="gif"]‘)
        for img in images:
            img_url = img.get("data-original")  #获取到所有图片
            pic_name = img.get("alt")
            pic_name = re.sub(r"[\??\.,。 !!\*]"," ",pic_name)
            # 获取后缀名
            suffix = os.path.splitext(img_url)[1]
            filename = pic_name + suffix

            # 拿到文件名之后 现在可以添加到img_queue 队列中了
            self.img_queue.put((img_url,filename))

class Consumer(threading.Thread):
    def __init__(self,page_queue,img_queue,*args,**kwargs):
        super(Consumer, self).__init__(*args,**kwargs)
        self.page_queue = page_queue
        self.img_queue = img_queue

    def run(self):
        while True:
            # 两个队列都为空的时就退出
            if self.img_queue.empty() and self.page_queue.empty():
                break
            img_url,filename = self.img_queue.get() # 把上面封装的元组进行解包 (注意)
            request.urlretrieve(img_url,‘images/‘+filename)
            print(filename," 下载完毕")

def main():
    # 定义两个队列
    page_queue = Queue(100) # 爬100页
    img_queue = Queue(1000) # 存的图片 数值尽量设置大一点

    for x in range(1,101): # 获取 1-3页
        url = ‘http://www.doutula.com/photo/list/?page=%d‘ % x
        # 每一页的url 放入队列
        page_queue.put(url)

    for x in range(5):
        t = Producer(page_queue,img_queue)
        t.start()

    for x in range(5):
        t = Consumer(page_queue,img_queue)
        t.start()

if __name__ == ‘__main__‘:
    main()

原文地址:https://www.cnblogs.com/kenD/p/11123555.html

时间: 2024-11-09 19:21:01

表情包的同步异步下载的相关文章

Swift中利用NSURLConnection进行同步异步下载(实例解析)

原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc 一.同步异步两个概念 简单来讲,同步就是函数或者闭包(objective c中的block)执行完毕才能返回.异步是立刻返回,然后异步执行的动作结束后,再进行回调. 二.同步下载 同步下载: class func sendSynchronousRequest(_ request: NSURLRequest, returningResponse response:AutoreleasingUnsafeMut

使用webClient实现图片同步,异步下载

WebClient.DownloadFile 方法 将具有指定 URI 的资源下载到本地文件. 命名空间:System.Net 程序集:System(在 system.dll 中) 同步实现参考代码: private void btnsyndownload_Click(object sender, EventArgs e){File.Delete("download.jpg");try{if (!File.Exists("download.jpg")){WebCli

网络数据的下载(NSUrlconnection异步下载和NSstring同步下载)和UI界面数据的刷新(都是抛弃第三方库的一些本质)

<1>NSString同步下载        //字符串的类方法,会根据url向服务器发起同步的数据请求,并将请求结果作为返回值    //同步请求数据,会对程序的UI主线程造成阻塞,用户体验极差 NSString *str = [NSString stringWithContentsOfURL:[NSURL URLWithString:kUrl] encoding:NSUTF8StringEncoding error:nil];    //json格式的数据 进行json解析 数据最外层是

Swift正在使用NSURLConnection异步下载同步(实例解析)

原版的blog.转载请注明出处 http://blog.csdn.net/hello_hwc 一.同步异步两个概念 简单来讲.同步就是函数或者闭包(objective c中的block)运行完成才干返回. 异步是立马返回,然后异步运行的动作结束后.再进行回调. 二.同步下载 同步下载: class func sendSynchronousRequest(_ request: NSURLRequest, returningResponse response:AutoreleasingUnsafeM

同步下载 异步下载

异步下载:支持应用程序在后台下载数据,在等待下载完成的过程中不会阻塞代码的运行 同步下载:调用一个方法的时候,如果该方法的返回依赖于它的功能是否完成,则称该方法为同步方法.必须下载完成才能进行下一步.会出现卡壳现象. 同步下载几种形式: NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"]; 形式一: NSString *str=[NSString stringWithContentsOfURL:url encoding:NS

自从会了Python在群里斗图就没输过,Python批量下载表情包!

导语 最近图慌,于是随便写了个表情包批量下载的脚本,没什么技术含量,纯娱乐性质. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: fake_useragent模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 爬的站长之家的表情包,链接: http://sc.chinaz.com/biaoqing/index.html 非常好爬,思路也很简单: ① 获得表情包所在地址:

requests实践02_下载斗图拉最新表情包

下载斗图拉最新表情包 要爬取的目标所在网址:http://www.doutula.com/photo/list/?page=1 需要用到的第三方库:requests(用于请求图片链接得到图片内容) 一点点正则表达式的应用:(.*?):在代码中用来匹配图片链接地址,(.*):用来匹配图片对应的名称更多的正则表达式使用参见正则表达式 re模块的使用,其中用到re.findall('匹配规则',字符串),将符合匹配规则从整个字符串从找出来,放在一个新的列表中,并返回这个列表(list),更多re模块使

HTTP_异步下载

//创建imageVIew对象 - (void)createImageView { UIImageView *imageView = [[UIImageView alloc]init]; //1 imageView.frame = CGRectMake(30, 120, 300, 400); imageView.backgroundColor = [UIColor redColor]; [self.view addSubview:imageView];//2 //[imageView relea

UI_18 图片异步下载、KVO

一.异步下载图片ImageViewDownloader 图?下载是iOS开发中常?的功能,但系统并未提供图?下载类. 为了便于后续使?,可以将图?下载封装到?个类?? (ImageDownloader) 新建SingleViewApplication,使用默认的Storyboard,向其中添加一个Button一个ImageView并关联属性.添加事件.点击Button实现异步下载并显示图片.AsynImageDownloader类封装了下载图片的方法. 使用代理进行AsynImageDownlo