代码如下

import requests
import threading
from queue import Queue
import time
from lxml import etree# 生产者线程
class Thread_crawl(threading.Thread):def __init__(self,name,crawl_queue):threading.Thread.__init__(self)self.name = nameself.crawl_queue = crawl_queuedef run(self):while True:if self.crawl_queue.empty():breaktry:url = self.crawl_queue.get(block=False)# print('组件化',url)self.get_content(url)except:passdef get_content(self,url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'}response = requests.get(url=url, headers=headers).content.decode('utf-8')tree = etree.HTML(response)href_list = tree.xpath('//div[@class="list-wrap clearfix"]/a/@href')for href in href_list:response1 = requests.get(href).content.decode('utf-8')# print('------------',response)customer_queue.put(response1)# 消费者线程
class Thread_customer(threading.Thread):def __init__(self,name):threading.Thread.__init__(self)self.name = namedef run(self):while True:if customer_queue.empty() and flag:breaktry:response = customer_queue.get(block=False)self.get_data(response)except:passdef get_data(self,response):tree = etree.HTML(response)# print(response)# img_src_list = tree.xpath('ul[@]/li[1]/img/@src')img_src_list = tree.xpath('//*[@id="banner"]/div/div[1]/div[2]/div/div/ul/li[1]/img/@data-original')# print(img_src_list)# 标题title_list = tree.xpath('//div[@class="banner-right"]/h2/text()')# print(title_list)# 厂商指导价zhidaijia_list = tree.xpath('//div[@class="banner-right"]/p/text()')# print(zhidaijia_list)# 分期方案fenqi_list = tree.xpath('//div[@class="service"]//text()')# print(fenqi_list)# 首付方式shoufu_dic = {}shoufu_list = tree.xpath('.//ul[@class="down-payment"]//li/text()')length = len(shoufu_list)# print(shoufu_list)# 全部首付for i in range(length):shoufu_type_dic = {}shoufu_type_list = tree.xpath('//div[@class="case"]/div[{}]//p/text()'.format(i+3))for m in range(0,len(shoufu_type_list),2):n = m+1shoufu_type_dic[shoufu_type_list[m].strip()] = shoufu_type_list[n].strip()# print(shoufu_list[i])# print(shoufu_type_list)# print(str(len(shoufu_list))+'\t'+str(len(shoufu_type_list)))shoufu_dic[shoufu_list[i]] = shoufu_type_dic# print(shoufu_dic)# 车的设置setting_dic = {}setting_list = tree.xpath('//ul[@class="config-detail"]//p/text()')# print(setting_list)length = len(setting_list)for i in range(0,length,2):j = i+1setting_dic[setting_list[i]]=setting_list[j]# print(setting_dic)maodou_dic['图片'] = img_src_list[0]maodou_dic['标题'] = title_list[0]maodou_dic['厂商指导价'] = zhidaijia_list[0].split(':')[-1]maodou_dic['分期方案'] = fenqi_list[0]maodou_dic['首付方式'] = str(shoufu_dic)maodou_dic['配置情况'] = str(setting_dic)print(maodou_dic)if lock.acquire():with open('maodou1.txt','a',encoding='utf-8') as fp:fp.write(str(maodou_dic)+'\n')lock.release()lock = threading.Lock()
maodou_dic={}
# 消费者队列
customer_queue = Queue()
flag = False
if __name__ == '__main__':start_time = time.time()print('开始时间是',start_time)# 生产者队列crawl_queue = Queue()for page in range(1,11):url = 'https://www.maodou.com/car/list/all/pg{}?keyword='.format(page)# print(href)crawl_queue.put(url)crawl_name = ['a1','a2','a3','a4']crawl_thread = []for name in crawl_name:crawl = Thread_crawl(name,crawl_queue)crawl.start()crawl_thread.append(crawl)customer_name = ['c1','c2','c3','c4']customer_thread = []for name in customer_name:customer = Thread_customer(name)customer.start()customer_thread.append(customer)for thread in crawl_thread:thread.join()flag = Truefor thread in customer_thread:thread.join()end_time = time.time()print('结束时间是',end_time)print('过程共耗时',end_time-start_time)

运行结果:

采用生产者消费者模式爬取毛豆新车网相关推荐

  1. 用生产者消费者模式爬取斗图吧,一次性收获超多表情包【python爬虫入门进阶】(11)

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.

  2. Python网络爬虫3 - 生产者消费者模型爬取某金融网站数据

    博客首发于www.litreily.top 应一位金融圈的朋友所托,帮忙写个爬虫,帮他爬取中国期货行业协议网站中所有金融机构的从业人员信息.网站数据的获取本身比较简单,但是为了学习一些新的爬虫方法和技 ...

  3. 二十五、爬取毛豆新车的数据

    最近发现有篇公众号爬虫文章没有更新到CSDN爬虫篇|爬虫实战(十),一般都是CSDN没有更新到公众号中. 前言: 对于爬虫还有一点小知识:fake_useragent的使用 fake_useragen ...

  4. python3爬虫——多线程爬取斗图网表情包

    本文用多线程生产者,消费者模式爬取斗图网的表情包,并下载保存到本地,get_page()函数负责获取页面的图片的url链接,downlod_img()函数通过图片url下载保存到本地文件夹中,开启多线 ...

  5. 【JAVA】生产者消费者模式

    首先要思考一个问题:为什么要使用这种模式进行生产代码. 优点: 极大的解决了代码之间的耦合程度 解释: 之前我们写的代码可能是这样的,有A和B 两个功能代码处理数据,B代码的执行必须要依赖于A代码才能 ...

  6. Java并发编程实战~生产者-消费者模式

    前面我们在<Worker Thread 模式>中讲到,Worker Thread 模式类比的是工厂里车间工人的工作模式.但其实在现实世界,工厂里还有一种流水线的工作模式,类比到编程领域,就 ...

  7. java 消费者模式 多线程_[Java并发-24-并发设计模式] 生产者-消费者模式,并发提高效率...

    生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...

  8. delphi生产者消费者模式代码_并发设计模式:生产者-消费者模式,并发提高效率...

    生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...

  9. 一文讲明生产者-消费者模式

    核心是一个任务队列,生产者线程生产任务,并将任务添加到任务队列中,而消费者线程从任务队列中获取任务并执行.该模式有如下优点: 1 解耦 解耦的关键:组件之间的依赖关系和通信方式受限.生产者.消费者之间 ...

  10. 生产者消费者模式-java原生、Disruptor实现方案

    生产者消费者模式介绍 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻 ...

最新文章

  1. c++ 构造函数析构函数 数据安全_C++知识点 16:构造函数和析构函数的语法
  2. Linux的企业-Redis数据库、缓存和哨兵Sentinal、Redis高可用
  3. java中字符串的创建_【转载】 Java中String类型的两种创建方式
  4. Scala教程之:Option-Some-None
  5. swf批量转png_CAD批量打印(探索者易打软件)优势介绍
  6. html5自动把某个层放在屏幕底部,告诉你一个将 footer 保持在底部的最好方法
  7. 开发人员如何成为架构师
  8. VisualCode 查看代码历史版本、还原代码到既定历史版本
  9. mysql 攻击密码_MySQL用户Root密码为弱口令的攻击
  10. java 租车管理系统_jsp+servlet+jdbc实现的java web共享租车信息管理系统,包括登陆注册,页面框架Easy UI...
  11. 最小生成树构造算法--Prim算法,Kruskal算法(C语言)
  12. 【Python3网络爬虫开发实战】 3.2-使用requests
  13. 重新启动postgre报错时,解决方案 ( 由备份文件占用空间太大造成 ) (linux 命令 df -h 查看磁盘空间)
  14. python爬虫技术总结_python爬虫知识点总结(二)爬虫的基本原理
  15. 4.程序员的自我修养---静态链接
  16. K3Cloud BOS设计 值更新 字段拼接到文本字段
  17. 2020校招Java笔试题
  18. 智能电导率系统电路设计详解
  19. 【转载】Android系统裁剪方法
  20. 歌唱比赛报名php源码,2021东方音乐挑战赛正式官宣发布 歌唱比赛音乐选秀节目全球报名招募...

热门文章

  1. 【实用网址】:平常用不到,想用的时候找不到
  2. 实用网址(永久更新中)
  3. 东南大学自动化934面试资料1
  4. Scrum板与Kanban如何抉择?敏捷工具:SHSYdsjgyadtgad
  5. xp系统远程桌面关闭计算机,系统是xp在本机开启远程桌面后,别人使用远程桌面连接我的电脑,我的电脑就会出现蓝屏停止代码是0x0000007f...
  6. Unity 之 ShaderGraph 实现火焰效果入门级教程
  7. Badboy提示脚本错误解决方法
  8. 京东Q3财报净亏损28亿元,连续亏损,徐雷会下课吗?
  9. 由三个点坐标判断三个点能否组成三角形模板(自用,客官可取)
  10. android studio 使用xml:app命名空间代码不提示问题