python 第三方库gevent 协程用法 爬虫案例

运行环境:python3.6

第三方库安装:pip install gevent

 

         网络爬虫,这种io高密集型的应用由于大部分的时间在等待响应方面,所以CPU的使用率并不高,为了解决这些问题,我们使用异步的方式来进行爬虫程序。

gevent是python的第三方库,通过greenlet实现协程,其基本思想是:

当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。

下面是正常请求和试用协程请求的简单案例:

import gevent
import requests
import time

# 创建一个待爬的url列表
url_list = ["https://www.csdn.net", "https://www.jianshu.com", "https://www.baidu.com", "https://blog.csdn.net/t8116189520",
            "https://www.baidu.com", "https://www.baidu.com", "https://ai.youdao.com", "https://www.163.com/",
            "https://fanyi.baidu.com", "https://www.tmall.com/", "https://www.taobao.com/" ]

# 定义一个功能函数,输入url获取网页源码
def get_HTML(url):
    resp=requests.get(url)
    # 判断响应码是否为200
    if resp.status_code==200:
        res=resp.status_code
        pass
    else:
        print(url,resp.status_code)

# 试用普通方法对url列表进行请求,并计算耗时
def common_method(url_list):
    time_begin = time.time()
    for i in url_list:
        get_HTML(i)
    print(time.time() - time_begin)
    
# 试用协程对url列表进行请求,并计算耗时
def gevent_method(url_list):
    time_begin=time.time()
    g_list=[]
    for i in url_list:
        s=gevent.spawn(get_HTML, i)
        g_list.append(s)
    gevent.joinall(g_list)
    print(time.time()-time_begin)
    
print("begin common")
common_method(url_list)

print("begin gevent")
gevent_method(url_list)


运行结果如下:

ps:由于待爬的列表数量比较少,所以效率提升并不是很明显。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值