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。