1、 ** scrapy框架的架构图示:**
它的组成部分:
- Scrapy Engine(引擎):用来处理整个系统的数据流处理、触发事务,是整个框架的核心。
- Item(项目):定义了爬取结果的数据结构,爬取的数据会被赋值成该对象。
- Scheduler(调度器):用来接受引擎发过来的请求并加入队列中,并在引擎再次请求的时候提供给引擎。
- Item Pipeline(项目管道):负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据。
- Downloader(下载器):用于下载网页内容,并将网页内容返回给 Spiders。
- Spiders(蜘蛛):其内定义了爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。
- Downloader Middlewares(下载器中间件):位于引擎和下载器之间的钩子框架,主要是处理引擎与下载器之间的请求及响应。
- Spider Middlewares(Spiders 中间件):位于引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛输入的响应和输出的结果及新的请求。
2、scrapy 数据流机制
- Engine 首先打开一个网站,找到处理该网站的 Spider 并向该 Spider 请求第一个要爬取的 URL。
- Engine 从 Spider 中获取到第一个要爬取的 URL 并通过 Scheduler 以 Request 的形式调度。
- Engine 向 Scheduler 请求下一个要爬取的 URL。
- 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。
- 重复第二步到最后一步,直到 Scheduler 中没有更多的 Request,Engine 关闭该网站,爬取结束。
3、安装和创建项目
- 安装scrapy库
pip install scrapy -i https://pypi.doubanio.com/simple/
- 创建scrapy项目(在你想要创建工程目录的路径终端执行)
scrapy startproject projectname(项目名))
- 创建爬虫文件(进入自己的项目)
scrapy genspider baidu(关键字名) baidu.com(你要爬取的网页)
- 执行scrapy项目
scrapy crawl baidu(关键字名)
4、创建项目及文件描述
scrapy startproject 文件名
产生文件的tree:
project/ __pycache__ spiders/ __pycache__
__init__.py
spider1.py
spider2.py
...
__init__.py
items.py
middlewares.py
pipelines.py
settings.py scrapy.cfg
文件介绍:
- scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。
- items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里。
- pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。
- settings.py:它定义项目的全局配置。
- middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。
- spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。