文章目录

  • Python爬虫(十一)——Scrapy爬虫框架简介
  • 安装
  • 结构
  • 解析
  • ENGINE 整个框架的核心
  • DOWNLOADER
  • SCHEDULER 调度模块
  • Downloader Middleware
  • SPIDER
  • Item PIPELINES
  • Spider MIDDLEWARE
  • requests库与scrapy库的比较
  • 相同点
  • 不同点
  • 常用命令


Python爬虫(十一)——Scrapy爬虫框架简介

scrapy不是一个简单的功能库,而是一个功能强大的网络爬虫框架。它是实现爬虫功能的一个软件结构和功能组件集合。它约束了一个模板,用户用这个模板来实现爬虫。

安装

打开cmd执行一下语句:

pip install scrapy
scrapy -h

成功后:

python爬虫架构图_中间件

结构

Scrapy有七个结构:SPIDERS(入口)、ITEM PIPELINES(出口)、ENGINE(已实现)、SCHEDULER(已实现)、DOWNLOADER(已实现)和MIDDLEWARE、INTERNET。

在这7个结构中,主要有三条数据流:

  1. SPIDERS->ENGINE->SCHEDULER 首先是Spider给EngineE提交请求Requests,然后Engine转发给Scheduler。
  2. SCHEDULER->EMGINE->DOWNLOADER->ENGINE->SPIDERS 首先是Scheduler向Engine提交网络爬取请求Requests,然后Engine通过中间件发送给Downloader,然后Downloader从Internet中爬取相关网页,然后将爬取内容封装成成响应对象Response再发送给Engine,最终到达Spider。
  3. SPIDERS->ENGINE->ITEM PIPELINES and SCHEDULER Spider处理从Downloader获得的响应后形成ITEMS和一个新的请求Requests,然后发送给Engine。然后Engine将Items发给Item Pipelines进行后期的数据处理,将Requests发送给Scheduler从而爬取新的信息。

解析

ENGINE 整个框架的核心

它的主要功能有:

  • 控制所有模块之间的数据流
  • 根据条件触发事件

DOWNLOADER

它的主要功能是获得一个请求然后爬取网页得到信息打包后返回。

SCHEDULER 调度模块

对所有的爬取请求进行调度管理,对这些请求进行排序。

Downloader Middleware

为了实施ENGINE、SCHDULER和DOWNLOADER之间的用户可配置的控制(修改、丢弃、新增请求或响应),设置了这个中间件。

SPIDER

主要功能:

  • 解析Downloader返回的响应
  • 产生爬取项
  • 产生额外的爬取请求

Item PIPELINES

以一组操作顺序组成,用流水线的方式处理Spider产生的爬取项(清理、检验和查重),最后将数据存储到数据库。

Spider MIDDLEWARE

为了请求和爬取项的再处理(修改、丢弃、新增请求或爬取项),设置了这个中间件

requests库与scrapy库的比较

相同点

  • 都可以进行页面请求和爬取
  • 可用性都很好,文档丰富,入门简单
  • 都没有处理js、提交表单、应对验证码等功能

不同点

requests

Scrapy

页面级爬虫

网站级爬虫

功能库

框架

并发性不足,性能差

并发性好,性能较好

重点在于页面下载

重点在于爬虫结构

定制灵活

一般定制灵活,深度定制困难

上手十分简单

入门稍难

:网络爬虫的快慢只是一个简单的参数,在应对反爬机制时反而要求爬取速度较慢。小的程序适合使用requests库,而较大的适合Scrapy

常用命令

格式:

>scrapy <command> [options] [args]

常用命令:

命令

说明

格式

startproject

创建一个新工程

scrapy startproject <name> [dir]

genspider

创建一个爬虫

scrapy genspider [options] <name> <domain>

settings

获得爬虫配置信息

scrapy settings [options]

crawl

运行一个爬虫

scrapy crawl <spider>

list

列出工程中所有爬虫

scrapy list

shell

启动URL调试命令行

scrapy shell [url]

使用命令行是为了自动化操作,易于脚本控制。