Scrapy 网络爬虫原理
专业爬虫框架 5+2结构
爬虫框架:实现爬虫功能的一个软件结构和功能组件集合
已有实现,不需要修改:
ENGINE SCHEDULER
、DOWNLOADER
用户编写(配置):
SPIDER(入口)
、 ITEM
、 PIPELINES(出口)
5+2结构:五个模块,两个中间件
(一)ENGINE
控制所有模块之间的数据流
根据条件触发事件
(二)DOWNLOADER
获得请求,并根据请求下载网页
(三)SCHEDULER
调度和管理所有爬虫请求
(四)中间件DOWNLOADER MIDDLEWARE
实施ENGINE、SCHEDULER和DOWNLOADER之间进行用户可配置的控制,可修改和编写
功能:修改、丢弃、新增请求或响应
(五)SPIDER
由用户编写配置代码
1.解析DOWNLOADER返回的响应(Response)
2.产生爬取项(scraped item)
3.产生额外的爬取请求(Request)
它向整个框架提供了最初始的访问链接,同时对每次爬取回来的内容进行解析,再次产生新的爬取请求,并从内容中分析和提取出相关的数据
(六)ITEM PIPELINES
由用户编写配置代码
1.由一组操作顺序组成,类似流水线,每个操作是一个ITEM PIPELINES类型
2.以流水线方式处理SPIDER产生的爬取项
可能的操作包括:清洗、校验和查重爬取项中的HTML数据、将数据存储到数据库
(七)中间件SPIDER MIDDLEWARE
目的:对请求和爬取项的再处理
功能:修改、丢弃、新增或爬取项
两个中间件DOWNLOADER MIDDLEWARE和SPIDER MIDDLEWARE对其中的request、response和item做一定额操作,用户可据此控制一定的数据流
requests库和Scrapy爬虫的比较
requests库 | Scrapy |
---|---|
页面级爬虫 | 网站级爬虫 |
功能库 | 框架 |
并发性考虑不足,性能较差 | 并发性好,功能较高 |
重点在于页面下载 | 重点在于爬虫结构 |
定制灵活 | 一般定制灵活,深度定制困难 |
上手简单 | 入门稍难 |
都不能处理JavaScript、提交表单、应对验证码等功能(可拓展)
爬取速度快慢,需要根据实际情况来考虑