爬虫框架与平台使用_Scrapy

一、Scrapy安装

  1. 官网地址:https://scrapy.org

  2. 安装

    1. pip install scrapy 
  3.  测试安装

    1. 只需要启动python交互式编程终端,看看能否import模块scrapy即可;
  4. scrapy帮助

    1. 在交互式编程终端,使用import引入scrapy模块,并使用help(scrapy)获取scrapy框架API整体模块结构(其 他更加详细的帮助可以使用help与dir获取)
  5. 教程与参考资料

    1. https://docs.scrapy.org/en/latest/

二、Scrapy组件结构与工作流程

  1. 核心组件介绍

    1. 组件01:引擎(Scrapy Engine)
      1. Scrapy Engine引擎作用有两个:  
        1.  控制Scrapy框架中所有组件之间的数据流;    
        2.  并在某些爬取动作发生的时候触发数据处理事件。
    2. 组件02:调度器(Scheduler)
      1. 调度器(Scheduler)接收来自引擎的请求,并将它们排队,以便在引擎请求时向引擎提供这些请求。
    3. 组件03:下载器(Downloader)
      1. 下载者(Downloader)负责下载网页并将其发送给引擎,引擎把下载的网页发送给蜘蛛/爬虫处理。
    4. 组件04:蜘蛛/爬虫(Spiders)
      1. 蜘蛛/爬虫(Spider)负责解析下载器下载的网页,并从中提取数据项(ITEM)(也称为爬取项)或后续的爬取请求。
      2. 蜘蛛/爬虫(Spider)一般由用户实现,用来实现用户的爬取逻辑。一般继承Spider类来定制实现。
    5. 组件05:数据项管道(Item Pipeline)
      1. 数据项管道(Item Pipeline)负责处理被蜘蛛/爬虫提取(或爬取)的数据项。典型的任务包括:    
        1.  清理;
        2.  验证;
        3.  持久存储(如将数据项存储在数据库关系数据库或者NoSQL数据库中)。
    6. 组件06:下载器中间件(Downloader middlewares)
      1. 下载器中间件(Downloader middlewares)是位于引擎和下载器之间的特定功能的回调Hook,负责处理从引擎 传递到下载器时处理请求,以及从下载器传递到引擎的响应。   
      2. 使用下载器中间件(Downloader middlewares)的几种情况:
        1. 需要根据条件放弃一些请求。
        2. 在没有爬取到网页的情况下,发送一个响应给spider;
        3. 重新发送新的请求,而不是将收到的响应传递给spider;
        4. 在传递给spider之前改变接受到的响应;
        5. 在将请求发送给下载者之前处理该请求(即在Scrapy将请求发送到网站之前);
    7. 组件07:蜘蛛/爬虫中间件(Spider middlewares)
      1. 蜘蛛/爬虫中间件(Spider middlewares)是位于引擎和蜘蛛之间的特定功能的Hook,负责处理Spider的输入 (响应)和输出(数据项或者请求)。
      2. 蜘蛛/爬虫中间件(Spider middlewares)的几种情况:
        1.  spider回调的输出后的处理:包含:更改/添加/删除请求或数据项;
        2. 开始请求的后处理;
        3. 处理spider异常;
        4. 对一些基于响应内容的请求调用errback,而不是回调
  2. 核心工作流程

    1. Scrapy的工作流程是按照爬取的数据设计的流程,并据此设计组件结构。(下图是来自Scrapy的官方文档)
    2. 流程01-获取请求
      1.  引擎从蜘蛛获取需要爬取的初始请求。     
        1. 源:Spider
        2. 目标:Engine
        3. 数据:请求
      2. 流程02-请求调度安排
        1. 引擎调度爬取请求到调度器,并申请下一个需要爬取的爬取请求。
          1. 源:Engine
          2. 目标:Scheduler
          3. 数据:请求
      3. 流程03-调度爬取请求
        1. 引擎器返回下一个爬取请求给引擎。(为什么不直接爬取,而是需要经过调度器处理呢?调度的好处在于:多 任务爬取,还可以处理爬取请求与爬取过程的时间不一致的时间差。)
          1. 源:Scheduler
          2. 目标:Engine
          3. 数据:请求
      4. 流程04-发送请求给下载器
        1. 引擎将请求发送到下载器,并通过下载器中间软件传递(process_request回调函数可以处理请求数据)。     
          1. 源:Engine
          2. 目标:Downloader
          3. 数据:请求
      5. 流程05-下载器完成下载
        1. 一旦页面下载器完成页面下载,下载器将使用下载好的页面生成一个响应(使用该页面),并将其发送到引 擎,通过下载器中间软件(process_response回调函数完成下载后的页面数据处理)。
          1. 源:Downloader
          2. 目标:Engine
          3. 数据:响应
      6. 流程06-数据项抽取
        1. 引擎从下载器接收响应并将其发送到spider进行处理,并通过spider中间件进行处理(process_spider_input 回调函数处理爬取的网页数据)。
          1. 源:Engine
          2. 目标:Spider
          3. 数据:响应
      7. 流程07-返回抽取的数据与请求
        1. Spider处理响应(从爬取的网页中抽取需要的数据项),并通过spider中间件(process_spider_output回调 函数处理Spider处理过的数据)向引擎返回抽取的数据项或者新的附加请求。
          1. 源:Spider
          2. 目标:Engine
          3. 数据:数据项(附加的请求)
      8. 流程08-存储抽取的数据项
        1. 引擎将已处理的数据项发送到数据项管道,然后将已附加的请求发送到调度程序,并请求可能的下一个请求进 行爬取。
          1. 源:Engine
          2. 目标:Item Pipeline/Scheduler
          3. 数据:数据项/附加请求
      9. 流程09-结束爬取
        1. 重复01-08,直到调度器中没有请求调度为止。

三、Scrapy入门

        这个入门是按照官方的教程组织。   

        不是上面介绍的每个组件都需要我们开发,实际只需要我们开发业务部分,爬虫的通用功能部分都封装到框架 中,所以我们需要一个框架的环境,并理解整个工作流程,并关注需要开发的部分,以及开发部分与整个框架组件 的关系。

  1. 创建一个爬虫项目
    1. 爬虫项目使用scrapy框架提供的一个工具创建:scrapy,该工具创建的项目会提供业务部分运行的环境与配 置。
  2. scrapy工具介绍
    1. 获取scrapy工具帮助
    2.  直接在终端输入scrapy,可以直接输出scrapy工具的帮助。 命令: 其中startproject命令项就是我们马上要使用来创建项目的。
    3. 获取startproject命令项帮助
    4. 使用scrapy工具创建一个爬虫项目
      1. 创建爬虫项目的两个重要参数:     
      2. 项目名称
      3. 项目存放目录(可选,默认当前目录)
        1. $ scrapy startproject FirstScrapy
      4. 爬虫项目文件
        1. 可以查看创建的项目,其中的文件结合上面的组件与工作流程,大致也知道其用途与作用。
    5. 实现爬虫业务
      1. 因为在框架在开发,为了保证框架能顺利工作,需要按照设计的结构,继承scrapy.Spider类,并发起一个爬取 请求,并处理。
    6. 创建爬虫代码模块
      1. 爬虫中两个重要的属性
        1. name属性   
          1. name属性,用来在执行爬虫的时候指定爬虫。属性类型是字符串。
        2. start_urls属性
          1. start_urls属性用来发起一个爬虫任务请求。属性类型是列表。
      2. 在项目目录下的scrapy工具的帮助
      3.  与项目相关的命令有(6个):     
        1. list:列出项目中爬虫列表。
        2. check:检查爬虫。
        3. crawl:启动爬虫任务。
        4. edit:编辑爬虫。
        5. fetch:获取。    
        6. parse:解析。
      4. 运行爬虫
        1.  scrapy crawl <脚本名称>
      5. check爬虫
        1. scrapy check <脚本名称>
      6. parse爬虫
        1. parse命令用来测试爬虫的parse函数。
          1. scrapy parse --spider=home https://ke.qq.com/course/list? mt=1001&st=2002&tt=3019&price_min=1  
        2. parse命令的帮助:scrapy parse -h
      7. fetch爬虫   
        1. 直接下载页面,并显示在终端。   
          1. scrapy fetch https://ke.qq.com/course/list? mt=1001&st=2002&tt=3019&price_min=1
      8. genspider生成爬虫   
        1. genspider可以查看爬虫模板,创建爬虫,编辑爬虫等功能。其帮助如下:
          1. scrapy genspider -h
        2. 查看爬虫模板
          1. scrapy genspider -l
        3. 创建爬虫
          1. scrapy genspider -t crawl myspider <网站url>
        4. 创建并编辑爬虫
          1. scrapy genspider -e myspider <网站url>
      9. view查看爬取页面
        1. scrapy view https://www.baidu.com
      10. shell交互式爬虫处理
        1. scrapy shell 'https://ke.qq.com/course/list? mt=1001&st=2002&tt=3019&price_min=1'
      11. settings获取settings.py中的配置
        1. settings指令用来获取与设置settings.py中的配置值。
          1. scrapy settings --get=SPIDER_MODULES
      12. runspider运行爬虫文件
        1.  这个命令是直接执行爬虫代码文件,与crawl的区别在于,crawl执行的是爬虫项目spiders目录下的有爬虫名 的爬虫。
          1. scrapy runspider ./FirstScrapy/spiders/home_spider.py             
  3. 爬取目标            

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值