zoukankan      html  css  js  c++  java
  • Scrapy爬虫框架

    一、Scrapy爬虫框架介绍

    Scrapy:功能强大快速的网络爬虫框架,非常优秀的python第三方库,也是基于python实现网络爬虫的重要的技术路线

    Scrapy的安装

      pip3 install scrapy

    安装后小测:执行scrapy -h

    scrapy不是一个简单的函数功能库,而是一个爬虫框架

    Scrapy爬虫框架结构

    爬虫框架

      爬虫框架是实现爬虫功能的一个软件结构和功能组件集合

      爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫

      

    在这5个模块之间,数据包括用户提交的网络爬虫请求、以及从网络上获取的相关内容,在这些结构之间进行流动,形成了数据流

    Scrapy框架包含三条主要的数据流路径

      第一条路径:从SPIDERS模块经过ENGINE到达SCHEDULER,其中ENGINE从SPIDERS的地方获取了爬取用户的请求,请求通过SPIDERS到达ENGINE之后,ENGINE将这个爬取请求转发给了SCHEDULER模块,SCHEDULER模块负责对爬取请求进行调度

      第二条路径:是从SCHEDULER模块通过ENGINE模块到达DOWNLOADER模块,并且最终数据返回到SPIDERS模块

            ENGINE模块从SCHEDULER获得下一个要爬取的网络请求,这个时候的网络请求是真实的,要去网络上爬取的网络请求,ENGINE获得这样的请求之后,通过中间件发送给DOWNLOADER模块,DOWNLOADER模块拿到这样的请求之后,真实的连接互联网,并且爬取相关的网页,爬取到网页之后,DOWNLOADER模块将爬取的内容形成一个对象,这个对象叫响应,叫response,将所有的内容封装成一个response之后,将这个响应再通过中间件、ENGINE,最终发送给SPIDERS,应该说,在这条路径中,一个真实的,爬取url的请求,经过SCHEDULER、DOWNLOADER,最终返回了相关内容到达了SPIDERS

      第三条路径:是从SPIDERS模块,经过ENGINE模块,到达ITEM PIPELINES模块以及SCHEDULER模块

            首先SPIDERS处理从DOWNLOADER获得的响应,也就是从网络中爬取的相关内容,处理之后产生了两个数据类型,一个数据类型叫做爬取项(scraped item),我们也叫他item,另外的一个数据类型,是新的爬取请求,也就是说我们从网络上获得一个网页之后,如果这个网页中有其他链接,也是我们十分感兴趣的,可以在SPIDERS中增加相关的功能,对新的链接发起再次的爬取,SPIDERS生成这两个数据类型之后,将他们发送给ENGINE模块,ENGINE模块收到了两类数据之后,将其中的item发送给ITEM PIPELINES,将其中的requests发送给SCHEDULER进行调度,从而为后期的数据处理以及再次请求网络爬虫提供了新的数据来源

    在这个路径之中,ENGINE控制着各个模块的数据流,并且他不断的从SCHEDULER获得真实要爬取的请求,将这个请求发送给DOWNLOADER

    整个框架的执行是从向ENGINE发送第一个请求开始,到获得所有链接的内容,并将内容处理后放到ITEM PIPELINES为止,框架的入口是SPIDERS,框架的出口是ITEM PIPELINES

    ENGINE、SCHEDULER、DOWNLOADER都是已有的功能实现,用户不需要编写它,它们会按照既定的功能去完成他的任务,用户需要去编写(配置)的是SPIDERS模块和ITEM PIPELINES模块,其中SPIDERS模块用来向整个框架提供要访问的url链接,同时要解析从网络上获得的页面的内容,而ITEM PIPELINES模块负责对提取的信息进行后处理。

     二、Scrapy爬虫框架解析

    “5+2”结构:5个主要模块以及两个中间件

    ENGINE模块

      整个框架的核心,它控制所有模块之间的数据流,任何模块和模块之间的数据流动,都需要经过ENGINE模块的调度,同时,它根据各个模块提供的事件进行触发

      控制所有模块之间的数据流

      根据条件触发事件

      不需要用户修改

    DOWNLOADER模块

      根据用户提供的请求下载网页,功能比较单一,只是获得一个请求,并且向网络中提交这个请求,最终获得返回的相关内容

           根据请求下载网页

      不需要用户修改

    SCHEDULER模块

      对所有的爬取请求进行调度管理

      不需要用户修改

    Downloader Middleware

      目的:实现对Engine、Scheduler和Downloader三个模块之间的数据流进行用户可配置的控制

      功能:用户可以通过这个中间件的编写来修改、丢弃、新增向网络访问的请求或网络返回的响应

      用户可以编写配置代码

    SPIDERS模块

      它向整个框架提供了最初始的访问链接,同时对每次爬取回来的内容进行解析,再次产生新的爬取请求,并且从内容中分析出提取出相关的数据

      解析Downloader返回的用户响应(Response)

      产生爬取项(scraped item)

      产生额外的爬取请求(Request)

      需要用户编写配置代码   

    ITEM PIPELINES模块

      以流水线方式处理Spider产生的爬取项

      由一组操作顺序组成,类似流水线,每组操作对item进行一个处理,每个操作是一个Item Pipeline类型

      可能操作包括:对item的内容进行清理、检验和查重爬取项中的HTML数据、将数据存储到数据库,甚至在流水钱前面的功能模块,可以去掉item的后续操作。

      需要用户编写配置代码

    Spider Middleware

      目的:对spider产生的请求以及爬取项进行再处理的一个操作

      功能:修改、丢弃、新增请求或爬取项

      用户可以编写配置代码

    框架中的5个模块形成了既定的功能,重点编写的是SPIDERS模块和ITEM PIPELINES模块,为了操作其中的数据流,对数据流进行一定的控制,可以通过两个中间件对其中的request、response和item做一定的操作

    三、requests库和Scrapy爬虫的比较

    相同点:

      两者都可以进行页面请求和爬取,他们形成了Python爬虫的两个重要技术路线。

      两者可用性都好,文档丰富,入门简单

      两者都没有处理js、提交表单、应对验证码等功能(可扩展)

    不同点:

      

    选用哪个技术路线开发爬虫

      非常小的需求,requests库

      不太小的需求,Scrapy框架,例如:持续的或者不间断的或者周期性的爬取一个网站的信息,并且对数据的信息,希望积累,形成自己的爬取库,这种情况建议使用Scrapy框架

      定制程度很高的需求(不考虑规模),自搭框架,requests>Scrapy

    四、Scrapy爬虫的常用命令

    Scrapy命令行

      Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行。

    Scrapy命令行格式

      >scrapy<command>[options][args]   注:Scrapy命令在<command>这个区域来体现

    Scrapy常用命令

      

    Scrapy爬虫的命令行逻辑

    为什么Scrapy采用命令行创建和运行爬虫?

      命令行(不是图形界面)更容易自动化,适合脚本控制。

      

          

      

  • 相关阅读:
    Java中Comparable与Comparator的区别
    LeetCode[5] 最长的回文子串
    LeetCode[3] Longest Substring Without Repeating Characters
    LeetCode 7. Reverse Integer
    统计单词出现的次数
    System.arraycopy()和Arrays.copyOf()的区别
    SyncToy
    查看端口占用及进程号
    TCP协议
    python 的日志logging模块学习
  • 原文地址:https://www.cnblogs.com/suitcases/p/11301421.html
Copyright © 2011-2022 走看看