多线程爬取狗妈表情包-程序员宅基地

技术标签: 爬虫  python  多线程  队列  

 通过多线程爬取狗妈表情包

import requests
import json
from jsonpath import jsonpath
import threading
import queue
import time
#创建下载线程
class downlodethread(threading.Thread):
    	def __init__(self,name,urlpage):
        	super().__init__(name=name)
        	self.urlpage = urlpage
    def run(self):
        print(f"{self.name}正在运行")
        #print(self.urlpage.get())
#判断队列是否为空,不为空则取出url
        while not self.urlpage.empty():
            url = self.urlpage.get(block=False)
            #拿到表情包序号
            d = url[58:78]
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
                }
            reponse = requests.get(url =url,headers =headers)
            #为方便管理我在e盘下建文件夹下载,运行代码时需要修改成你想下载的地址
            with open(r'E:\\狗妈表情包\\'+str(d)+'.jpg','wb')as f:
                print(self.name,'正在下载')
                f.write(reponse.content)
#分析请求爬取数据
class crawl(threading.Thread):
    def __init__(self,name,first_queue):
        super().__init__(name=name)
    def run(self):
        lock = threading.Lock()
        print(f"{self.name}正在运行")
        while not first_queue.empty():
            t = first_queue.get(block=False)
            headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
    }
            print(f"{self.name}正在运行")
            response = requests.get(url=t,headers = headers)
            #把数据放入队列
            lock.acquire()
            second_queue.put(response.text)
            lock.release()
            print(f"{self.name}运行结束")
def parse_response(t):
    data = json.loads(t)
    x = jsonpath(data, '$..data..thumbURL')
    print('解析线程启动')
    #print(x)
    for i in x:
        urlpage.put(i)

if __name__ == '__main__':
    first_queue = queue.Queue()
    second_queue = queue.Queue()
    third_queue = queue.Queue()
    urlpage = queue.Queue()
    #网址通过分析ajax请求得到
    for i in range(0,480,30):#把网址放入队列中
        first_queue.put(f"https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%A5%9E%E4%B9%90%E4%B8%83%E5%A5%88%E8%A1%A8%E6%83%85%E5%8C%85&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&word=%E7%A5%9E%E4%B9%90%E4%B8%83%E5%A5%88%E8%A1%A8%E6%83%85%E5%8C%85&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={i}&rn=30&gsm=5a&1594005271382=")
    #print(first_queue.get())
    #启动爬取线程组
    for c in range(0,3):
        crawlthread = crawl(f'爬取{c}',first_queue)
        crawlthread.start()
    #time.sleep(5)
    crawlthread.join()
    while not second_queue.empty():
        t = second_queue.get()
    #解析
        t = threading.Thread(target=parse_response(t))
        t.start()
        t.join()
    # 等待解析线程
    time.sleep(2)
    for e in range(0,3):
        thread = downlodethread(f'下载{e}',urlpage)
        #print(urlpage.get())
        thread.start()
    thread.join()

这是从百度图片中抓取下的狗妈表情包,因为百度图片用的是ajax请求,所以需要分析网页,并解析json数据。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/snake_boy_/article/details/107666775

智能推荐

Android 监听输入法隐藏与显示状态切换_android app切换输入法监听-程序员宅基地

文章浏览阅读3.7k次。监听输入法弹起状态_android app切换输入法监听

计算机网络综合简答----最终版(二)_在以太网中,为什么要限制电缆的最大长度?-程序员宅基地

文章浏览阅读5.9k次。接上篇: 计算机网络综合简答----最终版(一)11、为什么计算机网络要采用分层体系结构?计算机网络是极为复杂的系统,采用分层体系结构进行设计,将计算机网络核照其实现的功能分解为功能相对独立的若干层,从最底层到最高层,系统功能迎层加强与完警,最终完成系统要完成的功能.分层体系结构的好处在干F各层实现相对独立的功能,每一层不必知道下一层功能实现的细节.只要知道下层通过层间接口提供的服务是什么以..._在以太网中,为什么要限制电缆的最大长度?

程序员26条做网站的定律原理和效应-程序员宅基地

文章浏览阅读559次。做网站的一些定律原理和效应汇总(26条),做网站符合人类发现的些许定律和原理,也体现了一些著名的效应。其实对任何事都适用。  1.250定律  拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也就意味着得罪了250 名顾客。 在你的网站访客中,一个访客可能可以带来一群访客,任何网站_做网站的原理

粒子群算法MatLab代码-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏18次。【代码】粒子群代码。_粒子群算法matlab代码

计算机指令vbs,DOS命令大全:Prnport.vbs命令详解 – itShouce-程序员宅基地

文章浏览阅读902次。创建、删除和列出标准的 TCP/IP 打印机端口,以及显示和更改端口配置。如果不带参数,prnport.vbs 显示prnport.vbs 命令的帮助。创建标准 TCP/IP 打印机端口MS-DOS命令语法cscript prnport.vbs -a -r PortName [-s RemoteComputer] -hIPAddress [-u UserName -w Password] [-o ..._prnport.vbs

uni-app微信小程序ocr插件调用及配置,配置小程序其它插件也可以参考此文_plugin://ocr-plugin/ocr-navigator-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏17次。uni-app中配置微信小程序插件_plugin://ocr-plugin/ocr-navigator

随便推点

openstack 好文-程序员宅基地

文章浏览阅读455次。别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点 2016年08月14日 20:33:47 peach_li 阅读数:12256 转载自..._subnet_cluster.pkl

ASII码对照表-程序员宅基地

文章浏览阅读6.3k次。点击查看_asii

用神经网络实现机器翻译实战_神经网络机器翻译java语言程序-程序员宅基地

文章浏览阅读1.5k次。_神经网络机器翻译java语言程序

Linux_RedHat_7_硬盘分区与存储_redhat7查看分区信息-程序员宅基地

文章浏览阅读2.2k次。1、inux系统中常见的目录名称以及相应内容目录文件内容/boot开机所需文件—内核、开机菜单以及所需配置文件等/dev以文件形式存放任何设备与接口/etc配置文件/home用户主目录/bin存放单用户模式下还可以操作的命令/lib开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数/sbin开机过程中需要的命令/media用于挂载设备文件的目录/opt放置第三方的软件/root系统管理员的家目录_redhat7查看分区信息

软件缺陷管理工具mantis_manti工具是-程序员宅基地

文章浏览阅读2.2k次。软件缺陷管理工具mantis3.1 mantis 基本介绍 Mantis是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务。在功能上、实用性上足以满足中小型项目的管理及跟踪。更重要的是其开源,不需要负担任何费用。3.2 缺陷管理的基本流程v 管理员创建项目之后,项目经理 admin 对测试项目进行编辑。v 添加分类,还可以设置、修改版_manti工具是

jquery子元素过滤选择器:nth-child、:first-child、:last-child、:only-child_jquery .form-group div:nth-child(3)-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏4次。全栈工程师开发手册 (作者:栾鹏)jquery系列教程1-选择器全解jquery子元素过滤选择器jquery子元素过滤选择器,包括:nth-child、:first-child、:last-child、:only-child,具体功能如代码中注释。通过冒号前加空格实现。和基本过滤器的区别:基本过滤器冒号前没有空格,基本过滤器对元素进行操作,获取元素列表,此处的过滤器对父元素进行操作,获取子元素列表_jquery .form-group div:nth-child(3)

推荐文章

热门文章

相关标签