爬虫框架开发分析

目标

  1. 明确什么是框架
  2. 了解实现框架的好处
  3. 了解框架思路的来源
  4. 回顾并掌握scrapy的模块的作用
  5. 回顾并掌握scrapy的数据的传递过程
  6. 能够说出自己要实现的框包含的模块和模块的作用
  7. 掌握模块之间的关系
  8. 实现自己框架的代码结构

1 了解框架

1.1 什么是框架

框架是为了为解决一类问题而开发的程序,框架两个字可以分开理解,

框:表示指定解决问题的边界,明确要解决的问题;

架:表达的是能够提供一定的支撑性和可扩展性;从而实现解决这类问题达到快速开发的目的。

1.2 为什么要实现一个框架

现在网络上现成的开源第三方框架非常多,为什么还需要自己实现一个框架?

  • 现成开源第三方框架的局限性:

现成开源第三方框架是为了尽可能满足大部分的需求,不可能做到面面俱到,以及第三方框架的调试相对复杂

  • 解决特定的工作需求:

工作中会有很多特殊的需求,会经常使用某种套路去实现这些需求,那么为了提高效率可以专门把这种套路封装成一个框架

比如专门针对电商网站、新闻资讯写一个爬虫框架;再比如针对断点续爬、增量抓取等需求写一个框架

  • 提高自己的技术能力:

不一定需要亲自造轮子,但是应该知道如何造轮子

1.3 如何完成一个框架

现在我们明确了框架是什么以及为什么要实现一个框架,那么到底应该如何实现一个框架呢,我们的idea从哪里来呢?

  • 经验丰富的程序员:

直接根据以往经验和业务的需求进行框架原型设计,并用语言去实现

  • 经验一般的程序员:

通常应该是先学习别人的框架如何实现的,先学习别人优秀的比较好的实现思路和方案

那么同样的,对于我们:可以结合目前学习过的爬虫知识和爬虫框架,了解他们的设计思路,在这个基础上进行模仿和改进,从而实现一个框架

2 框架设计思路分析

2.1 学习Scrapy,提取它的设计思想(idea)

2.1.1 爬虫的流程(掌握)

爬虫框架解决的问题是爬虫问题,先来看看爬虫的基本流程:

  1. 构建请求信息(url、method、headers、params、data)
  2. 发起HTTP/HTTPS请求,获取HTTP/HTTPS响应
  3. 解析响应,分析响应数据的数据结构或者页面结构
    • 提取数据
    • 提取请求的地址
  4. 对数据进行存储/对新的请求地址重复前面的步骤

无论什么爬虫框架,其核心都离不开上面几个步骤

2.1.2 分析scrapy爬虫流程(掌握)

分析目标:

a. 分析各个组件的功能和作用
b. 分析各个组件之间的协作关系
c. 对组件进行大致的分类(核心和次要)

2.2 scrapy爬虫流程分析结果(掌握)

Scrapy流程分析图

  1. 三个内置对象:

     请求对象(Request)
     响应对象(Response)
     数据对象(Item)
    
  2. 五个核心组件:

     爬虫组件
         构建请求信息(初始的),也就是生成请求对象(Request)
         解析响应对象,返回数据对象(Item)或者新的请求对象(Request)
     调度器组件
         缓存请求对象(Request),并为下载器提供请求对象,实现请求的调度
         对请求对象进行去重判断
     下载器组件
         根据请求对象(Request),发起HTTP、HTTPS网络请求,拿到HTTP、HTTPS响应,构建响应对象(Response)并返回
     管道组件
         负责处理数据对象(Item)
     引擎组件
         负责驱动各大组件,通过调用各自对外提供的API接口,实现它们之间的交互和协作
         提供整个框架的启动入口
    
  3. 两个中间件:

     爬虫中间件
         对请求对象和数据对象进行预处理
    
     下载器中间件
         对请求对象和响应对象进行预处理
    

那么对应的,我们也可以在自己的框架是实现这样几个模块和对象

3 代码实现分析

3.1 明确模块之间的逻辑关系

五个核心模块和三个内置的对象是关键模块,需要优先实现

先抛开中间件,分析下它们之间的逻辑关系是:

  1. 构造spider中start_urls中的请求
  2. 传递给调取器进行保存,之后从中取出
  3. 取出的request对象交给下载器进行下载,返回response
  4. response交给爬虫模块进行解析,提取结果
  5. 如果结果是request对象,重新交给调度器,如果结果是item对象,交给管道处理

以上的逻辑是在引擎中完成的

对应的他们在引擎中的逻辑如下图:

3.2 设计代码结构

  • 首先给框架起一个名称,如:

 scrapy_plus
  • 继续分类以及解耦的设计思想:

  1. 把核心模块放置在一起
  2. 请求对象模块和响应对象模块统一作为http模块
  3. 数据对象单独作为一个分类

代码结构如下:

-- scrapy_plus
  -- __init__.py
  -- core
    -- __init__.py
    -- spider.py
    -- scheduler.py
    -- downloader.py
    -- pipeline.py
    -- engine.py
  -- http
    -- __init__.py
    -- request.py
    -- response.py
  -- item.py

到这里,我们完成了框架的大致结构是设计,那么接下来我们就需要实现模块中的具体内容了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值