我平常使用的是 scrapy 框架,scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取到数据内容。Scrapy 使用了 Twisted 异步网络框架来处理网络通讯,可以加快我们 的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。
scrapy 组成部分
【1】引擎(Engine)----------整个框架核心
【2】爬虫程序(Spider)------数据解析提取
【3】调度器(Scheduler)-----维护请求队列
【4】下载器(Downloader)----获取响应对象
【5】管道文件(Pipeline)-----数据入库处理
【两个中间件】
下载器中间件(Downloader Middlewares)
引擎->下载器,包装请求(随机代理等)
蜘蛛中间件(Spider Middlewares)
引擎->爬虫文件,可修改响应对象属性
scrapy 框架的工作流程:
【1】爬虫项目启动,由引擎向爬虫程序索要第一批要爬取的URL,交给调度器去入队列
【2】调度器处理请求后出队列,通过下载器中间件交给下载器去下载
【3】下载器得到响应对象后,通过蜘蛛中间件交给爬虫程序
【4】爬虫程序进行数据提取:
4.1) 数据交给管道文件去入库处理
4.2) 对于需要继续跟进的URL,再次交给调度器入队列,依次循环
scrapy 的优缺点?
-
优点:
1)scrapy 是异步的
2)采取可读性更强的 xpath 代替正则
3)强大的统计和 log 系统
4)同时在不同的 url 上爬行
5)支持 shell 方式,方便独立调试
5)写 middleware,方便写一些统一的过滤器
6)通过管道的方式存入数据库
-
缺点:
1) 基于 python 的爬虫框架,扩展性比较差
2) 基于 twisted 框架,运行中的 exception 是不会干掉 reactor(反应器),并且异步框架出错后
是不会停掉其他任务的,数据出错后难以察觉。