Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展行强,可以灵活完成个钟需求。
架构介绍
- Engine:引擎,负责整个系统的数据流处理、触发事务,是整个框架的核心。
- Item:项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该 Item 对象。
- Scheduler:调度器,接受引擎发过来的请求并将其加入队列中, 在引擎再次请求的时候将请求提供给引擎。
- Downloader:下载器,下载网页的内容, 并将网页内容返回给蜘蛛。
- Spider:蜘蛛,其定义了爬取的逻辑和网页解析的规则,它主要负责解析响应并生成提取结果及处理新的请求。
- Item Pipeline:项目管道,负责处理由蜘蛛从网页抽取的项目,它的主要任务是清洗、验收和存储数据
- Downloader Middlewares:蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果及新的请求。
数据流
Scrapy 中的数据流由引擎控制,数据流的过程如下:
- Engine 向 Spider 请求第一个要爬取的 URL,并通过 Scheduler 以 Request 的形式调度。
- Scheduler 返回一个要爬取的 URL 给 Engine, Engine 将 URL 通过 Downloader Middlewares 转发给 Downloader 下载。
- 一旦页面下载完毕, Downloader 生成该页面的 Response,并将其通过 Downloader Middlewares 发送给 Engine。
- Engine 从下载器中得到 Response, 并将其通过 Spider Middlewares 发送给 Spider 处理。
- Spider 处理 Response,并返回得到的 Item 及新的 Request 给 Engine。
- Engine 将 Spider 返回的 Item 给 Item Pipeline, 将新的 Request 给 Scheduler.
- 再重复整个过程,知道没有新的 Request,Engine 关闭网站,爬虫结束。
项目结构
Scrapy 项目是通过命令行创建的,但代码还是在 IDE 编辑。
-
创建项目:在任何盘符或者文件夹下 shift + 右键,打开命令行工具,输入一下命令:
可以看见创建成功的提示。其中 scrapydemo 是项目的名字。
进入项目可以查看目录结构: - scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。
- items.py:它定义了 Item 的数据结构,所有的 Item 的 定义都在这里。
- pipelines.py:它定义了 Item Pipeline 的实现,所有的 Item Pipeline 的实现都在这里。
- settings.py:它定义了项目的全局配置。
- middlewares.py:它定义了 Spider Middlewares 和 Downloader Middlewares 的实现。
- spiders: 其内定义了 spider,每个 spider 都是一个文件。