threading模块

简单使用

import threading,time
'''
想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载!
'''
def coding():for x in range(3):print('正在写代码%s'%x)time.sleep(2)def drawing():for x in range(3):print('正在画画%s'%x)time.sleep(2)def main():t1 = threading.Thread(target=coding)t2 = threading.Thread(target=drawing)t1.start()t2.start()if __name__ == '__main__':main()

生产者和消费者

Lock模式的生产者和消费者

import threading
import random,timegMoney = 1000
gLock = threading.Lock()
gTotalTimes = 10
gTimes = 0class Producer(threading.Thread):def run(self):global gMoneyglobal gTimeswhile True:money = random.randint(100,1000)gLock.acquire()#只生产10次,超过就停止,必须把锁给释放掉,否则产生死锁if gTimes >= gTotalTimes:gLock.release()breakgMoney += moneyprint('%s生产了%d元钱,剩余%d元钱' % (threading.current_thread(), money, gMoney))#生产一次,次数加1,总共10次gTimes += 1gLock.release()time.sleep(0.5)class Consumer(threading.Thread):def run(self):global gMoneywhile True:money = random.randint(100,1000)gLock.acquire()if gMoney >= money:gMoney -= moneyprint('%s消费了%d元钱,剩余%d元钱' % (threading.current_thread(), money,gMoney))else:if gTimes >= gTotalTimes:gLock.release()breakgLock.release()time.sleep(0.5)def main():for x in range(5):t1 = Producer()t1.start()for x in range(2):t2 = Consumer()t2.start()if __name__ == '__main__':main()

下载表情包

网址:http://www.doutula.com/photo/list/?page=1

解析:xpath

不用多线程,速度相对会很慢

import requests
from lxml import etree
from urllib import request
import os
import re
'''
想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载!
'''
def parse_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36','Referer': 'https://movie.douban.com/'}response = requests.get(url,headers=headers)text = response.texthtml = etree.HTML(text)imgs = html.xpath("//div[@class='page-content text-center']//img[@class!='gif']")for img in imgs:# print(etree.tostring(img))#图片地址img_url = img.get('data-original')#图片名字alt = img.get('alt')#替换掉名字里面的特殊字符alt = re.sub(r'[\??\.,。!!\*]','',alt)#获取图片的后缀名(.gif .jpg)suffix = os.path.splitext(img_url)[1]#保存的时候完整的图片名字filename = alt + suffixrequest.urlretrieve(img_url,'C:/Users/Administrator/Desktop/images/'+filename)def main():for x in range(1,10):url = 'http://www.doutula.com/photo/list/?page=%d'%xparse_page(url)if __name__ == '__main__':main()

利用多线程

main()

  • 定义两个队列,和创建多线程
  • page_queue():存放每一页的url
  • img_queue():存放每一页里面所有的表情的url

Producer()

  • 从page_queue()队列中去每一页的url,直到队列为空则break
  • 用xpath提取出每一页的所有图片的url
  • 把每个图片的url和名字存放到img_queue()队列里面

Consumer()

  • 从img_queue()队列中取出图片的url和名字
  • 下载保存
  • 直到page_queue()和img_queue()两个队列都为空则break

代码

import requests
from lxml import etree
from urllib import request
import os
import re
import threading
from queue import Queue
'''
想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载!
'''
class Producer(threading.Thread):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36','Referer': 'https://movie.douban.com/'}def __init__(self, page_queue, img_queue, *args, **kwargs):super(Producer, self).__init__(*args, **kwargs)self.page_queue = page_queueself.img_queue = img_queuedef run(self):while True:if self.page_queue.empty():breakurl = self.page_queue.get()self.parse_page(url)def parse_page(self,url):response = requests.get(url,headers=self.headers)text = response.texthtml = etree.HTML(text)imgs = html.xpath("//div[@class='page-content text-center']//img[@class!='gif']")for img in imgs:# print(etree.tostring(img))#图片地址img_url = img.get('data-original')#图片名字alt = img.get('alt')#替换掉名字里面的特殊字符alt = re.sub(r'[\??\.,。!!\*]','',alt)#获取图片的后缀名(.gif .jpg)suffix = os.path.splitext(img_url)[1]#保存的时候完整的图片名字filename = alt + suffixself.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_queueself.img_queue = img_queuedef run(self):while True:if self.img_queue.empty() and self.page_queue.empty():breakimg_url,filename = self.img_queue.get()request.urlretrieve(img_url, 'C:/Users/Administrator/Desktop/images/' + filename)print("已下载完一张图片")def main():page_queue = Queue(1000)img_queue = Queue(10000)for x in range(1,1758):url = 'http://www.doutula.com/photo/list/?page=%d'%xpage_queue.put(url)for x in range(10):t = Producer(page_queue,img_queue)t.start()for x in range(10):t = Consumer(page_queue,img_queue)t.start()if __name__ == '__main__':main()

结果:

python多线程下载表情包相关推荐

  1. 群里又会python的吗_自从会了Python在群里斗图就没输过,Python批量下载表情包!...

    原标题:自从会了Python在群里斗图就没输过,Python批量下载表情包! 导语 最近图慌,于是随便写了个表情包批量下载的脚本,没什么技术含量,纯娱乐性质. 让我们愉快地开始吧~ 开发工具 Pyth ...

  2. python多线程爬表情包,斗图斗够瘾~

    前言 嗨喽!大家好,这里是魔王. 什么?群里又在斗图 (+_+)? 别动让我来(>人<:) 教你一招爬取海量表情包图片, 从此告别图慌 !!! 课 题:python爬取海量表情包 课程亮点 ...

  3. python批量下载表情包(完整代码)

    还在为斗图找不到合适的表情而烦恼吗?学会python,分分钟下载有趣图片,做斗图界的No.1. 首先,打开网站https://www.fabiaoqing.com/biaoqing/lists/pag ...

  4. python做动态表情包下载_用 Python 开发一个【GIF表情包制作神器】

    之前小帅b写过这样一篇教程然后,好多人表示:虽然存了很多表情包但似乎还不是很过瘾因为它不可以自己来定制我们可不可以根据一些表情素材然后自己制作专属表情包呢像这样 本来小帅b想自己实现一个表情包制作器后 ...

  5. python爬表情包_【从零开始写爬虫一】批量下载表情包

    序 打算写个关于node的爬虫菜鸟教程,接下来将带大家一步一步写一个表情包爬虫,从获取页面,解析表情包链接, 清洗脏数据,下载表情包到本地.开始之前你需要有对chrome调试工具和ES6有一定了解,包 ...

  6. python爬取表情包,并下载到本地

    python爬取表情包 需求:爬取2页表情包,网址是:https://www.fabiaoqing.com/biaoqing 上代码 import requests # 数据请求模块 import p ...

  7. python自动发表情包

    Python 自动斗图 小老弟,听说你喜欢斗图,来来来,我们来PK一下,谁的图少算谁输! 我一句话来几十张图,就问你怕不怕! 这个怎么实现呢,我们要分三步: 下载表情包到本地 设计查询表情包 自动根据 ...

  8. Python自动生成表情包 斗图再无对手!

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

  9. 教你用Python爬取表情包网站下的全部表情图片

    教你用Python爬取表情包网站下的全部表情图片 又是我啦~~~ 最近上网的时候老看到有人用Python爬取表情包,心痒痒自己也整了一个. 使用到的扩展库:BeautifulSoup, request ...

最新文章

  1. #np.random.normal,产生制定分布的数集(默认是标准正态分布)
  2. 【XSY2719】prime 莫比乌斯反演
  3. spingmvc-参数传递
  4. mysql 事务 for update_mysql事务,select for update,及数据的一致性处理
  5. 汇编指令的学习4——ldm/stm指令、栈的处理
  6. 《Scikit-Learn与TensorFlow机器学习实用指南》第16章 强化学习
  7. python3爬取网易云歌单数据清洗_网易云音乐古风歌词统计分析
  8. Word批量转PDF/图片
  9. 什么是网络爬虫?爬虫有什么好处?
  10. 系统性谈谈软件可靠性——第4讲:软件可靠性测试
  11. 我的世界高分辨率/512x/1024x/2048x材质包制作教程:Substance 3D Designer
  12. js二级联动,购物车
  13. Python 实现文本共现网络分析
  14. 初识Rust踩坑小记
  15. 如何将base64转化为图片
  16. 数字图像处理论文解读- 双边滤波效果 - Bilateral Filtering for Gray and Color Image
  17. Android获取网络图片的宽高
  18. 自媒体爆文标题的十五种独特写法
  19. 自由软件之父:“苹果公司罪大恶极”
  20. JS逆向实战8——某网实战(基于golang-colly)

热门文章

  1. 闪耀暖暖文件传至云服务器失败,【攻略】闪耀暖暖服务器是是什么原因?教你无法连接到网络及黑屏解决方法...
  2. vue项目中 npm使用淘宝镜像方法记录cnpm
  3. linux 内核页表 tlb,Linux中的mips64 tlb管理
  4. Windows远程连接Redis(Linux)
  5. 编写程序,从键盘输入各位职工的工资数据,存入磁盘文件Salary.dat中,然后从该文件读出职工的工资数据,并计算输出每位职工的实发工资。实发工资的计算方法如下:实发工资=基本工资+加班工奖金-扣除
  6. 【Android】接入高德地图SDK
  7. linux删除u盘隐藏分区,利用分区助手和BootICE工具隐藏U盘原分区及调整分区方法...
  8. 【小知识】微软(Microsoft)的win7 SP1补丁,细分版本CHK和FRE的区别
  9. js判断手机系统版本为安卓还是苹果,苹果系统版本号
  10. python2.7中文报错_python 2.7 中文教程8 - 错误和异常