Scrapy 框架
scrapy爬虫框架
Scrapy 概述
Scrapy 是基于 Python 的一个非常流行的网络爬虫框架,可以用来抓取 Web 站点并从页面中提取结构化的数据。下图展示了 Scrapy 的基本架构,其中包含了主要组件和系统的数据处理流程(图中带数字的红色箭头)
Scrapy的组件
- Scrapy 引擎(Engine):用来控制整个系统的数据处理流程。
- 调度器(Scheduler) :调度器从引擎接受请求并排序列入队列,并在引擎发出请求后返还给它们。
- 下载器(Downloader) :下载器的主要职责是抓取网页并将网页内容返还给蜘蛛(Spiders) 。
- 蜘蛛程序(Spiders) :蜘蛛是用户自定义的用来解析网页并抓取特定URL的类,每个蜘蛛都能处理一个域名或一组域名,简单的说就是用来定义特定网站的抓取和解析规则的模块。
- 数据管道(Item Pipeline) :管道的主要责任是负责处理有蜘蛛从网页中抽取的数据条目,它的主要任务是清理、验证和存储数据。当页面被蜘蛛解析后,将被发送到数据管道,并经过几个特寒的次序处理数据。每个数据管道组件都是一个 Python 类,它们获取了数据条目并执行对数据条目进行处理的方法,同时还需要确定是否需要在数据管道中继续执行下一步或是直接丢弃掉不处理。数据管道通常执行的任务有:清理HTML数据、验证解析到的数据(检查条目是否包含必要的字段)、检查是不是重复数据(如果重复就丟弃)、将解析到的数据存储到数据库(关系型数据库或NoSQL数据库)中。
- 中间件(Middlewares) :中间件是介于引擎和其他组件之间的一个钩子框架,主要是为了提供自定义的代码来拓展 Scrapy 的功能,包括下载器中间件和蜘蛛中间件。
数据处理流程Scrapy
- 引擎询问蜘蛛需要处理哪个网站,并让蜘蛛将第一个需要处理的 URL交给它。
- 引擎让调度器将需要处理的URL放在队列中。
- 引擎从调度那获取接下来进行爬取的页面。
- 调度将下一个爬取的 URL 返回给引擎,引擎将它通过下载中间件发送到下载器。 5.当网页被下载器下载完成以后,响应内容通过下载中间件被发送到引擎;如果下载失败了,引擎会通知调度器记录这个 URL,待会再重新下载。
- 引擎收到下载器的响应并将它通过蜘蛛中间件发送到蜘蛛进行处理。
- 蜘蛛处理响应并返回爬取到的数据条目,此外还要将需要跟进的新的URL发送给引擎。
- 引擎将抓取到的数据条目送入数据管道,把新的 URL 发送给调度器放入队列中。上述操作中的第2步到第8步会一直重复直到调度器中没有需要请求的URL,爬虫就停止工作。
安装和使用Scrapy
使用Python的包管理工具pip来安装Scrapy。pip install scrapy
在命令行中使用scrapy命令创建名为demo的项目。scrapy startproject demo
项目的目录结构
demo
- scrapy.cfg
- demo
- spiders
- init.py
- init.py
- items.py
- middlewares.py
- pipelines.py
- settings.py
- spiders
切换到demo目录,用下面的命令创建名为 douban 的蜘蛛程序。scrapy genspider douban movie.douban.com