知行编程网知行编程网  2022-03-23 07:00 知行编程网 隐藏边栏 |   抢沙发  33 
文章评分 0 次,平均分 0.0

Asyncio是Python中非常牛逼的一个异步并发库,比较复杂不太好理解!从Py3.4之后开始加入这个内置并发库,一举解决了Python中高并发的问题。它提供了一整套异步IO模型的编程接口,可以说它不是一个简单的库更多的是一个框架!我们很多大名鼎鼎的第三方库比如Tornado,gevent里面都有它的身影,今天我们简单的示例让菜鸟快速上手。


实战并发爬取有道词典



玩并发比较多的是爬虫,爬虫可以用多线程,线程池去爬。但是我们用requests的时候是阻塞的,无法并发。所以我们要用一个更牛逼的库aiohttp,这个库可以当成是异步的requests。


1).爬取有道词典

有道翻译的API已经做好了,我们可以直接调用爬取。然后解析网页,获取单词的翻译。然后解析网页,网页比较简单,可以有很多方法解析。因为爬虫文章已经泛滥了,我这里就不展开了,很容易就可以获取单词的解释。

菜鸟上手Python最有野心的库Asyncio


2).代码的核心框架

  • 设计一个异步的框架,生成一个事件循环

  • 创建一个专门去爬取网页的协程,利用aiohttp去爬取网站内容

  • 生成多个要翻译的单词的url地址,组建一个异步的tasks, 扔到事件循环里面

  • 等待所有的页面爬取完毕,然后用pyquery去一一解析网页,获取单词的解释,部分代码如下:

菜鸟上手Python最有野心的库Asyncio


3).看看并发有多快

费了这么大的劲,用Asyncio这款神器玩并发到底有多快呢,我们来做个对比:

3.1).用Asyncio来异步爬取100个单词:

菜鸟上手Python最有野心的库Asyncio

>>

1 apple -> n. 苹果,苹果树,苹果似的东西;[美俚]炸弹,手榴弹,(棒球的)球;[美俚]人,家伙。

2 apple -> n. 苹果,苹果树,苹果似的东西;[美俚]炸弹,手榴弹,(棒球的)球;[美俚]人,家伙。

。。。

100 apple -> n. 苹果,苹果树,苹果似的东西;[美俚]炸弹,手榴弹,(棒球的)球;[美俚]人,家伙。

Time:2.343923807144165s


3.2).用同步爬取100个单词

如果我们用requests同步去爬取100个单词大概要多久呢,代码很上面类似,只是换成普通的函数即可。

1 apple -> n. 苹果,苹果树,苹果似的东西;[美俚]炸弹,手榴弹,(棒球的)球;[美俚]人,家伙。

2 apple -> n. 苹果,苹果树,苹果似的东西;[美俚]炸弹,手榴弹,(棒球的)球;[美俚]人,家伙。

。。。

100 apple -> n. 苹果,苹果树,苹果似的东西;[美俚]炸弹,手榴弹,(棒球的)球;[美俚]人,家伙。

Time:55.266273021698s


二者相差了28倍,如果并发的任务越多相差的速度会更大。当然以上只是一个举例仅供个人学习asyncio库,不是让大家去爬有道!通过这个简单的并发爬虫让小白可以快速使用Py3里面最强大的库!


asyncio可以和多进程,多线程和多协程配合使用,还有很多地方需要探索,大家可以循序渐进去研究一下!欢迎大家留言讨论。


Python趣味实战群

跟300人一起学Python


近期热门:

3大利器推荐,帮你写出规范漂亮的python代码

自学Python入行数据挖掘,听听数据挖掘美女工程师怎么说

分享一个我私藏的学Python心得


本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享