在Gevent协程的使用中我们已经学会简单的使用协程,这篇文章我们通过协程爬虫来测试一下具体的效果。Gevent遇到IO阻塞时会自动切换任务:

from gevent import monkey

monkey.patch_all() #

import gevent

from urllib.request import urlopen

def f(url):

print('GET: %s' % url)

resp = urlopen(url)

data = resp.read()

print('%d bytes received from %s.' % (len(data), url))

gevent.joinall([

gevent.spawn(f, 'https://www.python.org/'),

gevent.spawn(f, 'https://www.baidu.com/'),

gevent.spawn(f, 'https://www.e1yu.com/'),

])

基于以上代码,我们使用协程来抓取小说网:https://www.17k.com/all,网页的分析这里不过多介绍,主要是如何使用协程:

from gevent import monkey

monkey.patch_all()

from lxml import etree

import gevent

import requests

import time

def get_all_url(url,headers):

res=requests.get(url,headers)

tree=etree.HTML(res.text)

for i in tree.xpath('//tr[@class="bg0"]'):

item={}

item['cate']=i.xpath('./td[2]/a/text()')[0]

item['title']=i.xpath('./td[3]/span/a/text()')[0]

item['href']=i.xpath('./td[3]/span/a/@href')[0].lstrip('//')

item['count']=i.xpath('./td[5]/text()')[0]

item['author']=i.xpath('./td[6]/a/text()')[0]

item['date']=i.xpath('./td[7]/text()')[0]

item['fz']=i.xpath('./td[8]/em/text()')[0].split()[0]

#print(item)

# 构造翻页的URL请求,返回一个url列表

def get_url_list():

url_list = []

for i in range(1, 330):

url = 'https://www.17k.com/all/book/2_0_0_0_0_0_0_0_{0}.html'.format(i)

url_list.append(url)

return url_list

# 协程请求耗时

def gevent_get():

begin_time = time.time()

g_list = []

for k in get_url_list():

s = gevent.spawn(get_all_url, k, headers)

g_list.append(s)

gevent.joinall(g_list)

end_time = time.time()

print('gevent cost:%s' % str(end_time - begin_time))

# 普通请求耗时

def ordinary_get():

begin_time = time.time()

for k in get_url_list():

get_all_url(k,headers)

end_time = time.time()

print('ordinary cost:%s' % str(end_time - begin_time))

if __name__ == '__main__':

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"

}

gevent_get()

ordinary_get()

# gevent cost:17.533002614974976

# ordinary cost:47.7977340221405

通过以上代码,可以发现,协程的效率大约是普通的2倍左右,主要就是测试一下协程的效率,没有抓取小说的详情页,可以自己试着修改一下,练习一下!

未经允许不得转载:作者:鳄鱼君,

转载或复制请以 超链接形式 并注明出处 鳄鱼君。

python协程池爬虫_Python之协程爬虫 小说网协程爬虫案例相关推荐

  1. python通过ip池爬_python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会...

    我们上次说了伪装头部 ↓ 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 要多的站在对方的角度想问题 其实 这和泡妞差不多 你要多站在妹纸的角度思考 她的兴趣是什么 ...

  2. python通过ip池爬_python 爬虫 代理ip池(适合初学者)

    初次学习python爬虫的朋友在频繁访问被爬取页面网站时都会被拦截,也就是限制ip.这里教教大家建立代理ip池. #!/usr/bin/env python3# -*- coding: utf-8 - ...

  3. python通过ip池爬_Python爬虫 | IP池的使用

    一.简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问.所以我们需要设 ...

  4. python 小说爬虫_Python实现的爬取小说爬虫功能示例

    本文实例讲述了Python实现的爬取小说爬虫功能.分享给大家供大家参考,具体如下: 想把顶点小说网上的一篇持续更新的小说下下来,就写了一个简单的爬虫,可以爬取爬取各个章节的内容,保存到txt文档中,支 ...

  5. python并行计算进程池通信_Python使用进程池管理进程和进程间通信

    与线程池类似的是,如果程序需要启动多个进程,也可以使用进程池来管理进程.程序可以通过 multiprocessing 模块的 Pool() 函数创建进程池,进程池实际上是 multiprocessin ...

  6. nodejs爬虫与python爬虫_Python,Node.js 哪个比较适合写爬虫?

    主要看你定义的"爬虫"干什么用. 1.如果是定向爬取几个页面,做一些简单的页面解析,爬取效率不是核心要求,那么用什么语言差异不大. 当然要是页面结构复杂,正则表达式写得巨复杂,尤其 ...

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

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

  8. Golang并发模型:轻松入门协程池

    goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理.但有时候,我们还是想控制一下. 比如,我们有A.B两类工作,不想把太多资源花费在B类务上,而 ...

  9. 白话 Golang 协程池

    文章目录 1.何为并发 2.并发的好处 3.Go 如何并发 4.G-P-M 调度模型 5.Go 程的代价 6.协程池的作用 7.简易协程池的设计&实现 8.开源协程池的使用 9.小结 参考文献 ...

最新文章

  1. mysql语句优化百条_优化mysql语句
  2. 使用多尺度空间注意力的语义分割方法
  3. mysql根据字段长度查询_SQL语句如何查询某一字符串字段长度等于某个值的所有记录...
  4. MOSS 权限管理总结
  5. 编程入门python语言是多大孩子学的-包头孩子学编程python好吗
  6. MongoDB 查询超时异常 SocketTimeoutException
  7. Delphi的内存管理及内存泄露问题
  8. go语言有哪些劣势?
  9. Web 安全漏洞之 XSS 攻击,Java 开发必看!
  10. 台式机自动关机+自动重启问题
  11. OceanBase在蚂蚁金服的智能运维实践之路
  12. canvas笔记-canvas加载图片及放缩及加水印(两canvas同时使用)
  13. 【转载】NBU异机恢复oracle
  14. 如何更改java应用程序标题栏默认图标
  15. linux ssh 免密登陆
  16. 信息收集端口扫描工具masscan
  17. 项目一. 家庭记账软件
  18. 查看当前目录和上一级目录的命令
  19. AMetal平台学习——初步了解篇
  20. 【开发工具】SVN断网续传、续下解决办法

热门文章

  1. 牙齿松动怎么办|成年人牙齿松动怎么办
  2. 《材料力学》在线作业
  3. 信用评分之二--信用评分中的评分卡中的A卡、B卡和C卡
  4. PyCharm快捷键(替换和查找)
  5. opencv人脸识别之让电脑分清吴彦祖和彭于晏 (LBPH)
  6. 微信公众号/小程序注册认证
  7. 全球及中国人工沙行业需求前景与发展趋势预测分析报告2022-2028年
  8. 众昂矿业:萤石与医药
  9. 两条垂直的直线之间的关系
  10. input输入框点击变大缩小的js代码