目录

  • 协程池实现爬虫
    • 1 协程池模块使用介绍
    • 2 使用协程池实现爬虫的具体实现过程案例

协程池实现爬虫


1 协程池模块使用介绍

  1. 协程池模块
 import gevent.monkeygevent.monkey.path_all()from gevent.pool import Pool

2 使用协程池实现爬虫的具体实现过程案例

# coding=utf-8
import gevent.monkey
gevent.monkey.path_all()
from gevent.pool import Poolimport requests
from lxml import etree
from queue import Queue
import timeclass QiubaiSpider:def __init__(self):self.url_temp = "https://www.qiushibaike.com/8hr/page/{}/"self.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X \10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}self.queue = Queue()self.pool = Pool(5)self.is_running = Trueself.total_requests_num = 0self.total_response_num = 0def get_url_list(self):  # 获取url列表for i in range(1, 14):self.queue.put(self.url_temp.format(i))self.total_requests_num += 1def parse_url(self, url):  # 发送请求,获取响应return requests.get(url, headers=self.headers).content.decode()def get_content_list(self, html_str):  # 提取段子html = etree.HTML(html_str)div_list = html.xpath("//div[@id='content-left']/div")content_list = []for div in div_list:content = {}content["content"] = div.xpath(".//div[@class='content']/span/text()")print(content)content_list.append(content)return content_listdef save_content_list(self, content_list):  # 保存数据passdef exetute_requests_item_save(self):url = self.queue.get()html_str = self.parse_url(url)content_list = self.get_content_list(html_str)self.save_content_list(content_list)self.total_response_num += 1def _callback(self, temp):if self.is_running:self.pool.apply_async(self.exetute_requests_item_save, callback=self._callback)def run(self):self.get_url_list()for i in range(2):  # 控制并发self.pool.apply_async(self.exetute_requests_item_save, callback=self._callback)while True:  # 防止主线程结束time.sleep(0.0001)  # 避免cpu空转,浪费资源if self.total_response_num >= self.total_requests_num:self.is_running = Falsebreakif __name__ == '__main__':qiubai = QiubaiSpider()qiubai.run()

python多任务爬虫(四、协程池实现爬虫)相关推荐

  1. python异步爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  2. python 协程池和pool.map用法

    一.问题描述 现在有一段代码,需要扫描一个网段内的ip地址,是否可以ping通. 执行起来效率太慢,需要使用协程. #!/usr/bin/env python # -*- coding: utf-8 ...

  3. python 协程池

    python 协程池 一.问题描述 现在有一段代码,需要扫描一个网段内的ip地址,是否可以ping通. 执行起来效率太慢,需要使用协程. #!/usr/bin/env python # -*- cod ...

  4. Python进程池,线程池,协程池

    线程池 import threading import time def myThread():for i in range(10):time.sleep()print('d') sep=thread ...

  5. python3异步协程爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  6. Python 异步 IO 、协程、asyncio、async/await、aiohttp

    From :廖雪峰 异步IO :https://www.liaoxuefeng.com/wiki/1016959663602400/1017959540289152 Python Async/Awai ...

  7. python并发编程:协程asyncio、多线程threading、多进程multiprocessing

    python并发编程:协程.多线程.多进程 CPU密集型计算与IO密集型计算 多线程.多进程与协程的对比 多线程 创建多线程的方法 多线程实现的生产者-消费者爬虫 Lock解决线程安全问题 使用线程池 ...

  8. 爬虫15——协程异步

    1.协程,异步的概念 1.1 首先导入一段代码 import time def func():print("我爱黎明!")time.sleep(3) #睡三秒,让当前线程处于堵塞状 ...

  9. 连接池和协程池为何能提升并发能力?

    你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...

  10. Go协程池设计思路(Task-Job-Worker)

    1. 铺垫:Go 的接收器Receiver 在go语言中,没有类的概念,但是可以给类型(结构体,自定义类型)定义方法.所谓方法就是定义了接受者的函数.接受者定义在func关键字和函数名之间.可以理解成 ...

最新文章

  1. Ansible免密码登陆
  2. java centos7_centos7.0安装java环境
  3. ffmpeg时间基种类及转换
  4. qemu模拟armlinux执行目标文件系统的可执行文件
  5. canal解析mysql日志异常_利用Canal解析mysql binlog日志
  6. 第二章java编程基础测试题_Java编程基础测试题分享
  7. 数据安全 数据销毁_如何安全销毁敏感数据CD / DVD?
  8. JCP执行委员会新成员选举结果揭晓:Hologic未获通过
  9. c语言设计通讯录管理程序,C语言程序的设计学生通讯录管理系统方案.docx
  10. 六招让你成职场超男超女
  11. python递增文件名_python-文件存在时文件名中的数字递增
  12. Speedoffice(excel)如何根据身份证号计算年龄
  13. 随便说说字符集和编码
  14. 【转】常见算法在实际项目中的应用
  15. 如何测试某个网站的图片是否可外链使用
  16. TRACE32——List源代码查看
  17. 漫画告诉你:区块链到底是什么?
  18. JAVA实现手机短信验证码在指定有效的时间里校验
  19. 新赛季更新完服务器要维护到什么时候,王者荣耀新赛季刚更新就出乱子,维护到九点才开服,普攻都消失了...
  20. 关系型数据库和MySQL作业及答案

热门文章

  1. wps使用endnote报告参数错误
  2. 湿敏电阻HR202L使用记录
  3. php app 银联支付,php银联网页支付实现方法
  4. 猫、路由器、交换机的区别
  5. 电信猫的无线无法连接服务器,光纤猫连接路由器无法上网怎么办
  6. 猫、路由器和交换机的区别和联系
  7. 数字信号处理(自学篇)
  8. 【牛客】CPU的运算速度与许多因素有关,下面______是提高速度的有效措施?
  9. html侧边导航栏,浮动侧边导航栏的基本布局
  10. 铲雪车(snow) UVA10203 Snow Clearing 题解