#-*-coding:utf-8-*-
# -*-coding:utf-8-*-
import threading, time, requests, json
from  queue import Queue
class Pcoduct(threading.Thread):  # 继承多线程父类def __init__(self, i, q):super().__init__()  # 继承父类init#自动执行runself.i = iself.q = qdef run(self):  # 请求#复写run方法while True:if self.q.empty():breaktry:q2 = self.q.get(block=False)print(self.i, "任务执行")time3 = time.time()url = f"https://careers.tencent.com/tencentcareer/api/post/Query?timestamp={time3}&keyword=python&pageIndex={q2}&pageSize=10&language=zh-cn&area=cn"self.get_html(url)print(self.i, "任务结束")except:passdef get_html(self, url):headers = {  # 伪装成浏览器,防止反爬,通用'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}response = requests.get(url=url, headers=headers).json()q.put(response)
class Customer(threading.Thread):  # 继承多线程父类def __init__( self,j):super().__init__()  # 继承父类init#自动执行runself.j = jdef run(self):  # 请求#复写run方法while True:if c.empty() and  flag:breaktry:response=c.get(block=False)print(self.j, "任务执行")self.parse_html(response)print(self.j,'任务结束')except:passdef parse_html(self,response):job_list = response['Data']['Posts']for job in job_list:# 工作名称:name = job['RecruitPostName']# 工作地点:address = job['LocationName']# 岗位职责:Responsibility = job['Responsibility']Responsibility = Responsibility.replace('\n', '').replace('\r', '')# 详情url:PostURL = job['PostURL']infor = f'工作名称:{name},工作地点:{address},岗位职责:{Responsibility},详情url:{PostURL}'with lock:with open('腾讯招聘.txt', 'a', encoding='utf-8')as fp:fp.write(infor + '\n')
if __name__ == '__main__':lock=threading.Lock()flag=Falsestart = time.time()q = Queue()#生产者队列for i in range(1, 21):q.put(i)c=Queue()product= ['p1', 'p2', 'p3']  # 创建任务对列#起线程customer=['c1','c2','c3']qp=[]cq=[]for pi in product:crawl = Pcoduct(pi, q)crawl.start()qp.append(crawl)for ci in customer:crawl2 = Customer(ci)crawl2.start()cq.append(crawl2)for pj in qp:pj.join()  # 阻塞主线程flag=Truefor cj in cq:cj.join()end = time.time()print(end - start)

爬虫多线程生产者与消费者相关推荐

  1. Java多线程-生产者与消费者

    Java多线程生产者与消费者,准确说应该是"生产者-消费者-仓储"模型,使用了仓储,使得生产者消费者模型就显得更有说服力. 对于此模型,应该明确一下几点: 1.生产者仅仅在仓储未满 ...

  2. python 生产者和消费者模式_Python爬虫:生产者和消费者模式

    认识生产者和消费者模式 生产者和消费者是多线程中很常见的一个问题.产生数据的模块,我们称之为生产者,而处理数据的模块,就称为消费者.但是单单只有生产者和消费者显然还是不够的,一般来说,我们还有一个缓冲 ...

  3. java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题

    一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...

  4. java多线程生产者与消费者问题_java多线程实现生产者与消费者问题

    生产者与消费者多线程实现,首先的问题就是同步,就是关于临界资源的访问 我们首先来定义一个临界资源类,这里设为Q class Q { int z=4; } 这个int型的z就是我假设的临界资源的个数 然 ...

  5. java多线程生产者与消费者案例_多线程操作实例——生产者与消费者

    面对多线程学习生产者与消费者是最基本的实例 对于java后端开发的人员必须要掌握,还有考研考试计算机操作系统的同鞋. 下面是三个实例对于生产者与消费者的的例子,层层递进,逐步解决问题. 问题:生产者- ...

  6. Java基础进阶多线程-生产者和消费者模式

    1.什么是"生产者和消费者模式"? 生产线程负责生产,消费线程负责消费 生产线程和消费线程要达到均衡 这是一种特殊的业务需求,在这种特殊的情况下需要使用wait方法和notify方 ...

  7. 多线程——生产者与消费者(多)1.5新锁,问题解决

    package 多线程;import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; imp ...

  8. c++多线程生产者与消费者问题代码

    1.目录结构 2.代码 BufferPool.h #ifndef BUFFERPOOL #define BUFFERPOOL #include<windows.h> #include< ...

  9. C++多线程-生产者与消费者模型

    生产者-消费者是很有意思的一种算法.它的存在主要是两个目的,第一就是满足生产者对资源的不断创造:第二就是满足消费者对资源的不断索取.当然,因为空间是有限的,所以资源既不能无限存储,也不能无限索取. 生 ...

最新文章

  1. C# Socket Server 收不到数据
  2. [Linux] ubuntu 格式化u盘
  3. mysql输入select now()_mysql 中select now(); 是怎么执行的?没有指定FROM tablename?
  4. 精华阅读第6期|程序猿的世界,你不懂!
  5. Java JUC学习 - ConcurrentLinkedDeque 详解
  6. 排名前100的PHP函数及分析
  7. Wi-Fi闪开,网速快 100 倍的Li-Fi要来了
  8. AVA SE java基础 评委打分案例
  9. java中stringBuilder的用法(转)
  10. win7——win server 2012 iis中使用asp程序出现Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
  11. 微信点餐系统html,微信点餐系统,一种新型的点餐方式
  12. oracle 结果集已耗尽_结果集已耗尽
  13. LaSO: Label-Set Operations networks for multi-label few-shot learning 论文笔记
  14. 计算机科学与技术班徽图片,智慧教室平台教学系统在中职计算机专业教学中的应用...
  15. 《欢乐颂2》狗血的剧情才是生活该有的模样
  16. 临河三中宏志班2021年高考成绩查询,临河三中名教师简介一
  17. 服务器系统盘清理工具,服务器内存清理工具
  18. 高德地图——查询天气
  19. win无法进入计算机管理,Win10系统右键“管理”无法打开的解决方法
  20. Vue实现仿iPhone悬浮球

热门文章

  1. PAT1010 一元多项式求导 (25 分)
  2. C++ 静态链表(用数组模拟动态链表)
  3. Windows Azure Storage论文解读
  4. 【解题报告】Leecode 2057. 值相等的最小索引——Leecode周赛系列
  5. 【讲解】1030 Travel Plan (30 分)【DFS】_41行代码Ac
  6. 下图所示的PCB(进程控制块)的组织方式是(),图中()。【最全!最详细分析】
  7. 用户线程和内核线程之间的区别
  8. python封装成exe后运行失败_Python的带pandas包的程序封装成exe 2018-01-11
  9. OpenStack 的部署T版(三)——Glance组件
  10. c语言版票务管理系统,火车票务管理系统(C语言版)【TXT文件,改后缀即可】