500 Lines or Less | A Web Crawler With asyncio Coroutines:用协程写web爬虫

本文探讨了在网络通信密集型应用如Web爬虫中,异步I/O相较于传统同步方式的优势。通过使用Python的生成器、协程及asyncio模块,实现了高效的爬虫程序,该程序能够并发处理多个网络请求,显著提高抓取速度。

 

 前言

   传统的计算机科学强调算法的重要性,好的算法能更有效率的完成计算。但是在当今的很多web应用中,程序大部分时间并不是在计算,而是在进行网络通信,网络延迟大大增加了程序的等待时间,尤其是作为网络服务器要同时与多个客户端建立网络连接,这是非常低效的。目前的一个解决办法是采用异步I/O。

  本文会实现一个简单的web爬虫程序,爬虫是一个典型的异步程序,因为它会等待很多网络回复,而只做很少的计算。如果用一个线程去发送一个请求,然后等待返回,那么随着并发请求数量的增多,线程资源很快就会被耗尽,而采用异步I/O将不会出现这个问题。

  本文中的爬虫程序包括三部分,第一部分,介绍 async event loop 并用event loop简单写一个带有回调函数的爬虫程序,这个简单的爬虫程序的效率很高,但可扩展性比较差。第二部分,我们用python中的生成器实现一个简单的协程,我们可以看到,python中的协程不仅效率很高,扩展性也很强。第三部分,我们将采用python标准库中的asyncio模块,并增加一个队列来优化爬虫程序。

 任务

  爬虫程序会访问并下载在一个网站上的所有页面。从一个根URL开始访问,获取一个页面,然后解析这个页面中的URL,然将URL添加到队列当中,然后从队列中拿到URL爬取页面,重复上面的过程,直到队列中没有URL,爬虫程序将会停止。

 

 

ff

 

转载于:https://www.cnblogs.com/beautycode/p/9814372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值