之前涉及到的爬虫,都基本上使用的requests库进行爬取。但是request获取网站内容的话,是有相应时间的,要不然也不会设置timeout了。
但是,响应时间内,程序也在等待,响应时间越长等待时间就相对变长。
因为python的自身原因多线程就不做最优选了(但是我很喜欢用=)),多进程则是利用cpu的多核在同一时间内进行多个任务。
因此就该引出一个概念——协程coroutine。
一、协程
协程又叫微线程,将一个任务挂起并记住当前的状态进行调度切换。假如一个程序有两个方法A和B,协程就可以随时停止A来执行B,但是协程的本质还是单线程。
在爬虫程序中,在请求相应的时间内,就可以利用这个时间去执行其他的方法,当相应完成之后在继续处理,充分利用资源。
python中使用协程最常用的库应该就是asyncio了。
这边按我写的一个代理测试的脚本做一个例子,我这里使用的是ipidea的代理,好的代理能帮助你更好的获取数据,高质量低延迟,而且新用户可以白嫖哦!