Scrapy 入门
admin
2023-08-02 04:40:06
0次

Scrapy主要包括以下组件:

    引擎:用来处理整个系统的数据流处理,触发事务。

    调度器:用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回

     下载器:用来下载网页内容,并将网页内容返回给蜘蛛。

    蜘蛛:蜘蛛是主要干活的,用它来制定特定域名或网页的解析规则

    项目管道:负责处理有蜘蛛从网页抽取的项目,他的主要任务是清晰、验证和储存数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过及格特定的次序处理数据。

    下载器中间件:位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及相应。

    蜘蛛中间件:位于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输入。

    调度中间件:介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应


创建一个Scrapy项目:

    在开始爬取之前,你必须创建一个新的Scrapy项目。

    再进入你打算存储代码的目录中,运行下列命令:

    scrapy startproject tutorial

    该命令将会创建下列内容的tutorial目录:

        tutorial/

           scrapy.cfg

           tutorial/

             __init__.py

            items.py

            pipelines.py

            settings.py

            spiders/

              __init__.py

              .....

    这些文件分别是:

        scrapy.cfg:项目的配置文件

        tutorial/:该项目的python模块。之后你将在此加入代码。

        tutorial/items.py:项目中的item文件。

        tutorial/pipelines.py:项目中的pipelines文件。

        tutorial/settings.py:项目中的配置文件。

        tutorial/spiders/:放置spider代码的目录。


定义item

    ·item是保存爬取到的数据的容器;其使用方法和python的字典类似,并且提供了额外的保护机制来避免拼写错误导致的未定义字段错误。

    ·类似在ORM中做的一样,你可以通过创建一个scrapy.Item类,并且定义类型为scrapy.Field的类属性来定义一个Item。


Scrapy 入门

各部件职能:

Scrapy Engine: 这是引擎,负责Spiders、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等

Scheduler(调度器): 它负责接受引擎发送过来的requests请求,并按照一定的方式进行整理排列,入队、并等待Scrapy Engine(引擎)来请求时,交给引擎。简单的说,就是负责从引擎接受request并入队,当引擎请求他们时返回request

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,获取页面数据并提供给引擎,并将其获取到的Responses交还给Scrapy Engine(引擎),而后由引擎交给Spiders来处理,

Spiders:它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline:它负责处理Spiders中获取到的Item,并进行处理,比如去重,持久化存储(存数据库,写入文件,总之就是保存数据用的)

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spiders中间‘通信‘的功能组件(比如进入Spiders的Responses;和从Spiders出去的Requests)


数据在整个Scrapy的流向:

  通俗版:

程序运行的时候,

引擎:Hi!Spider, 你要处理哪一个网站?

Spiders:我要处理23wx.com

引擎:你把第一个需要的处理的URL给我吧。

Spiders:给你第一个URL是XXXXXXX.com

引擎:Hi!调度器,我这有request你帮我排序入队一下。

调度器:好的,正在处理你等一下。

引擎:Hi!调度器,把你处理好的request给我,

调度器:给你,这是我处理好的request

引擎:Hi!下载器,你按照下载中间件的设置帮我下载一下这个request

下载器:好的!给你,这是下载好的东西。(如果失败:不好意思,这个request下载失败,然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载。)

引擎:Hi!Spiders,这是下载好的东西,并且已经按照Spider中间件处理过了,你处理一下(注意!这儿responses默认是交给def parse这个函数处理的)

Spiders:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,这是我需要跟进的URL,将它的responses交给函数 def  xxxx(self, responses)处理。还有这是我获取到的Item。

引擎:Hi !Item Pipeline 我这儿有个item你帮我处理一下!调度器!这是我需要的URL你帮我处理下。然后从第四步开始循环,直到获取到你需要的信息,

注意!只有当调度器中不存在任何request了,整个程序才会停止,(也就是说,对于下载失败的URL,Scrapy会重新下载。)

再总结下,流程是:

     核心引擎从爬虫获取初始url,并生成一个Request任务投入Scheduler调度计划里

     引擎向调度器请求一个新的Request爬取任务并转发给downloader下载器

     下载器载入页面并返回一个Response响应给引擎

     引擎将Response转发给Spider爬虫做 数据提取 和 搜索新的跟进地址

     处理结果由引擎做分发:提取的数据 -> ItemPipeline管道,新的跟进地址Request -> 调度器

       流程返回第二步循环执行,直至调度器中的任务被处理完毕


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...