Scrapy 教程
Scrapy 是一套基于 Twisted 异步处理框架,纯 Python 实现的爬虫框架。
使用者只需要定制开发几个简单的模块,就能够轻松的实现一个爬虫。它可以用来抓取网页内容以及各种图片,使用非常简单方便。
Scrapy 框架主要由 Scrapy Engine(引擎)、Scheduler(调度器)、Downloader(下载器)、Spider(爬虫)、Item Pipeline(管道) 组成,另外还有常用的两个中间件:Downloader Middlewares(下载中间件)和 Spider Middlewares(Spider中间件)。
1. Scrapy框架架构图
- Scrapy Engine(引擎):
负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。 - Scheduler(调度器):
它负责接受引擎发送过来的 Request 请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。 - Downloader(下载器):
负责下载 Scrapy Engine(引擎)发送的所有 Requests 请求,并将其获取到的 Responses 交还给 Scrapy Engine(引擎),由引擎交给Spider来处理。 - Spider(爬虫):
它负责处理所有 Responses,从中分析提取数据,获取 Item 字段需要的数据,并将需要跟进的 URL 提交给引擎,再次进入 Scheduler(调度器)。 - Item Pipeline(管道):
它负责处理 Spider 中获取到的 Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。 - Downloader Middlewares(下载中间件):
你可以当作是一个可以自定义扩展下载功能的组件。 - Spider Middlewares(Spider中间件):
你可以理解为是一个可以自定扩展和操作引擎和 Spider 中间通信的功能组件。
2. 使用说明
Scrapy 框架的组成模块和使用说明,如图:
我们使用 Scrapy 框架抓取数据,通常只需要编写两部分代码:爬虫(Spider模块) 和 管道(Item Pipeline模块)。爬虫模块负责提供需要抓取的 Url 链接和网页解析工作,管道模块负责存储数据到数据库或者文件。
3. 使用范例
我们可以快速地使用 Scrapy 框架快速创建项目,然后简单编写一个爬虫文件,抓取数据。比如,抓取百度首页的标题:
import scrapy # 爬虫类 class BaiduSpider(scrapy.Spider): # 爬虫名称 name = 'baidu' # 抓取的页面 start_urls = ['https://baidu.com'] # 页面解析函数 def parse(self, response): title = response.css('title::text').extract_first() print("百度首页的标题:" + title)
运行结果:
百度首页的标题:百度一下,你就知道
Scrapy 安装、项目创建和运行:Scrapy 爬虫框架可以在 Python2、Python3 的版本上运行。1. Scrapy 安装:我们可以简单地通过 pip 安装 Scrapy 框架及其依赖:$ pip install Scrapy。2. Scrapy 创建项目:Scrapy 安装后,可以通过 Scrapy 命令创建一个爬虫项目,比如创建项目 tutorial:scrapy startproject tutorial。