Scrapy 框架

一、简介

是一个基于Twsited 的异步处理框架,是纯 Python 实现的爬虫框架

1.特点

结构清晰、模块之间的耦合度低、可拓展性极强

2.架构介绍

  • 爬虫引擎(engine):

    处理整个系统的数据流处理、触发事务,是整个框架的核心

  • Item:

    定义了爬取结果的数据结构,爬取的数据会被赋值成为该 Item 对象

  • 调度器(Scheduler):

    调度接收来自引擎的请求并将其放入队列中,并通过事件返回给引擎

  • 下载器(Downloader):

    下载页面内容,并将页面返回给spider

  • 爬虫(Spider):

    定义了爬取的逻辑与解析规则,它主要负责解析响应并提取结果,发起新的请求

  • 项目管道(item pipeline)

    负责处理爬虫解析后的项目,主要清洗、验证、数据持久化

  • 下载中间件(Downloader MiddleWare)

    位于引擎与下载器之间的钩子框架,主要处理引擎与下载器之间的请求与响应

  • 爬虫中间件(Spider MiddleWare)

    位于引擎与下载器之间的钩子框架了,主要处理爬虫输入响应和输出结果以及新的请求

3.数据流

核心:是由核心引擎控制,流程如下

1.     engine 首先打开一个网站,找到处理该网站的Spider,并向该 Spider 请求第一个要爬取的URL
2.     engine 从Spider中获取到第一个要爬取的URL,并通过Scheduler以Request的形式调度
3.     engine 从Scheduler 请求下一个要爬取的URL
4.     Scheduler返回下一个要爬取的URL给engine,engine将URL通过Downloader Middleware 转发给Downloader下载
5.     一旦页面下载完毕,Downloader生成该页面的Response,并通过Downloader Middleware 转发给engine
6.     engine 从Downloader 中接收到response,并通过Spider Middleware 转发给Spider处理
7.     Spider处理Response,并返回抓取到的Item 及新的Request 给 Engine
8.     Engine 将Spider返回的Item给Item Pipeline,将新的Request 给Engine
9.     重复2-8的步骤,直到Scheduler 没有更多的Request,Engine关闭网站,爬取结束

4.项目结构

scrapy.cfg: 项目的配置信息,主要为Scrapy 命令行工具提供一个基础的配置信息,包括了项目的配置文件路径、部署相关的信息等等

items.py : 设置数据存储模板,用于结构化数据

pipelines: 经过几个特定的次序处理数据清洗、验证、数据、持久化

settings.py :项目全局配置

middleware : Downloader Middleware 与 Spider Middleware 的实现

Spiders : 爬虫目录,包含了一个个Spider的实现,每个Spider都有一个文件

二、Scrapy框架的安装
1.pip 安装

pip install scrapy

windows报错的话

pip install pywin32

2.验证安装

输入 scrapy

三、Scrapy 框架入门
1.创建项目

scrapy startproject JobboleSpider

2.创建Spider

cd JobbloeSpider

scrapy genspider jobbole blog.jobbloe.com

注:三个属性,name allowed_domains start_urls 还有一个parse() 方法

3.创建Item

Item 是保存爬取数据的容器,使用方法与字典相似,多了额外的保护机制

4.解析Response

parse() 默认处理 start_urls

获取所有结果的列表 extract() 获取第一个用 extract_first()

使用命令, 进入Scrapy.cfg 运行一下命令

scrapy crawl jobbole

命令需要一个参数,即爬虫的名称

5.使用Item

可以理解为一个字典,在声明时需要实例化

6.后续request
通过下一页链接构造请求,主要用到 scrapy.Request 传递两个参数

url : 请求链接

callback : 他是回调函数。 回调函数进行解析或生成下一个请求

7.运行

scrapy crawl jobbole

保存为json 文件

scrapy crawl jobbole -o jobbole.json

8.使用 Item pipeline
常用的数据如下:

  • 清理HTML数据

  • 验证爬取的数据(检查Item 包含某些字段)

  • 查重(并丢弃)

  • 将爬取的结果保存到数据库中

  • 调用process_item() 方法必须返回一个包含数据的字典或是Item对象,或者抛出DropItem异常

MongoPipeline 类实现了 API 定义的另外几个方法


 from_crawler: 他是一个类方法,用@classmethod 标识,是一种依赖注入的方式

 open_spider: 当Spider开启时,这个方法被调用,上文程序主要进行了一些初始化操作

 close_spider:当Spider关闭时,这个方法被调用,上文程序关闭数据库链接

 process_item: 主要的处理方法,上文程序执行数据插入操作

定义好 MongoPipeline 与 DropItemPipeline 后需在 settings.py中启用他们

DOWNLOAD_DELAY = 2
ITEM_PIPELINES= {
        'JobboleSpider.pipelines.DropItemPipeline':300,
        'JobboleSpider.pipelines.MongoPipeline':400
}
MONGO_URI = 'localhost'
MONGO_DATABASE = 'jobbole'

重新执行爬取

scrapy crawl jobbole

三、Selector的用法
1.直接使用

2.scrapy shell

3.xpath

四、Spider的用法
1.Spider 运行流程

2.Spider 类分析

五、Downloader Middleware 的用法
1.process_request(request,spider)

2.process_response()

3.process_exception(request,exception,spider)

六、scrapy 爬取知乎用户