Scrapy爬虫框架
回顾之前的学习:
requests是一个自动爬取html页面并自动网络请求和提交的库
robots.txt则是网络爬虫排除标准
beautiful soup提供了解析html页面的功能
Re正则表达式帮助提取页面关键信息
而scrapy则是专业的爬虫框架!
scrapy爬虫框架结构:
Scrapy不是一个函数功能库,而是一个爬虫框架。
- 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。
- 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。
“5+2”结构:
1 Engine从Spider处获得爬取请求(Request)
2 Engine将爬取请求转发给Scheduler,用于调度
3 Engine从Scheduler处获得下一个要爬取的请求
4 Engine将爬取请求通过中间件发送给Downloader
5 爬取网页后,Downloader形成响应(Response) 通过中间件发给Engine
6 Engine将收到的响应通过中间件发送给Spider处理
7 Spider处理响应后产生爬取项(scraped Item) 和新的爬取请求(Requests)给Engine
8 Engine将爬取项发送给Item Pipeline(框架出口)
9 Engine将爬取请求发送给Scheduler
Engine控制各模块数据流,不间断从Scheduler处 获得爬取请求,直至请求为空
框架入口:Spider的初始爬取请求
框架出口:Item Pipeline
其中, schedule和downloader和engine都是已有实现了的,只有item pipelines和spiders需要用户编写配置。
scrapy爬虫框架解析:
Engine
(1)控制所有模块之间的数据流
(2)根据条件触发事件
不需要用户修改
Downloader
根据请求下载网页
不需要用户修改
Scheduler
对所有爬取请求进行调度管理
不需要用户修改
Downloader Middleware
目的:实施Engine、Scheduler和Downloader 之间进行用户可配置的控制
功能:修改、丢弃、新增请求或响应
用户可以编写配置代码
Spider
(1)解析Downloader返回的响应(Response)
(2)产生爬取项(scraped item)
(3)产生额外的爬取请求(Request)
需要用户编写配置代码
Item Pipelines
(1)以流水线方式处理Spider产生的爬取项
(2)由一组操作顺序组成,类似流水线,每个操 作是一个Item Pipeline类型
(3)可能操作包括:清理、检验和查重爬取项中 的HTML数据、将数据存储到数据库
需要用户编写配置代码
Spider Middleware
目的:对请求和爬取项的再处理 功能:修改、丢弃、新增请求或爬取项
用户可以编写配置代码
requests库和scrapy爬虫的比较:
相同点:
- 两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
- 两者可用性都好,文档丰富,入门简单
- 两者都没有处理js、提交表单、应对验证码等功能(可扩展)
requests:
- 页面级爬虫
- 功能库
- 并发性考虑不足,性能较差
- 重点在于页面下载
- 定制灵活
- 上手十分简单
scrapy:
- 网站级爬虫
- 框架
- 并发性好,性能较高
- 重点在于爬虫结构
- 一般定制灵活,深度定制困难
- 入门稍难
非常小的需求,requests库
不太小的需求,Scrapy框架
定制程度很高的需求(不考虑规模),自搭框架,requests > Scrapy
scrapy命令行:
Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行
>scrapy<command> [options] [args]