首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python爬虫之异步IO

要想写出高效率的爬虫,异步IO是你必须掌握的一种技巧。在了解异步IO之前,你需要了解什么是协程。什么是协程?我个人对Python协程的理解,协程是一个函数,调用该函数的时候你可以通过某种方法暂停它,然后通过某种方法让它继续执行。协程跟我们爬虫有什么关系?我们知道一般的爬虫流程,都是向服务器发起请求,然后等待对方返回相应的数据,最后对数据进行处理。在等待请求的过程中,我们的程序是啥都没干的,而且等待的时间对CPU来说是非常漫长的。如果可以在等待服务器返回数据的时候,程序去发起下一个请求,等到前一个请求返回数据后,再来进行处理,那么效果就会好很多,这种操作也就是异步IO。当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理。看上去是不是跟协程一样呢? 异步IO就是协程的一种具体运用。如何在爬虫中使用异步IO?在Python爬虫中,要想实现异步IO需要用到两个模块,asyncio和 aiohttp前者用来创建与运行协程,后者用来处理http请求和响应。asyncio模块该模块的工作原理:创建协程创建事件环(event_loop)把协程放进事件环(其实是把协程包装成future或者task再放进event_loop,这些细节先不讲)启动事件环,事件环运行里面的协程,当协程需要等待(await)的时候,事件环执行下一个协程。当所有的协程都运行过以后,再次回到第一个协程,如果需要等待的部分完成了,就执行下面的代码,还没则执行下一个协程,不断重复,直到所有协程,全部执行完毕再退出event_loop。

这篇文章只是介绍大概理念,具体模块的操作,后面我会写出我的笔记,如果大家不嫌弃,到时候也能去看看。

aiohttp模块这里写一个对比来展示一下aiohttp模块的威力。requests

aiohttp

最后,使用异步IO的确可以大大提高爬虫的效率,但同时也会给对方的服务器造成巨大的压力,使用的时候要注意分寸。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228G0R80B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券