一、协程实现并发爬取
协程,就是同时开启多个任务,但一次只顺序执行一个。等到所执行的任务遭到阻塞,就切换到下一个任务继续执行,从而节省阻塞所占用的时间。
二、协程爬虫的流程分析
由于协程的切换不像多线程调度那样耗费资源,所以不用严格限制协程的数量。
① 将要爬取的网址存储在一个列表中,由于针对每个网址都要创建一个协程,所以需要准备一个待爬取网址列表。
② 为每个网址创建一个协程并启动该协程。协程会依次执行,爬取对应的网页内容。如果一个协程在执行过程中出现网络阻塞或其它异常情况,则马上执行下一个协程。由于协程的切换不用切换线程上下文,消耗比较小,所以不用严格限制协程的数量。每个协程负责爬取网页,并将网页中的目标数据解析出来。
③ 将爬取到的目标数据存储在一个列表中。、
④ 遍历数据列表,将数据存储在本地文件中。
三、第三方库 gevent
gevent 是一个基于协程的 Python 网络库。
# 安装:
pip install gevent
引用
import gevent
① gevent 库的常用方法
创建并启动协程
等待所有协程执行完毕