zoukankan      html  css  js  c++  java
  • Scrapy工作原理

    1. Scrapy旧版架构图(绿线是数据流向)

    old

    • Spiders(爬虫):负责处理所有Responses,从中分析提取数据,获取Items字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
    • Engine(引擎):负责Spider、Item Pipeline、Downloader、Scheduler中间的通讯、信号以及数据传递等。
    • Scheduler(调度器):负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列和入队,当引擎需要时,交还给引擎。
    • Downloader(下载器):负责下载引擎发送的所有Requests请求,并将其获取到的Responses交还给引擎,由引擎交给Spider来处理。
    • Item Pipeline(管道):负责处理Spider中获取到的Items,并进行后期处理(如详细分析、过滤、存储等)。
    • Downloader Middlewares(下载中间件):一个可以自定义下载功能的组件。
    • Spider Middlewares(Spider中间件):一个可以自定义引擎和Spider交互的组件。
    • 通信的功能组件:如进入Spider的Responses和从Spider出去的Requests。

    2. Scrapy新版架构图

    new

    1. 组件介绍

    • Scrapy Engine(引擎):引擎负责控制数据流在所有组件中的流动,并在相应动作发生时触发事件。
    • Scheduler(调度器):调度器从引擎接受Request并将他们入队,以便之后引擎请求他们时提供给引擎。
    • Downloader(下载器):下载器负责获取页面数据并提供给引擎,而后提供给Spiders。
    • Spiders(爬虫):Spiders是用户编写用于分析Response并提取items(即获取到的items)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。 更多内容请看 Spiders
    • Item Pipeline(管道):Item Pipeline负责处理被Spider提取出来的items。典型的处理有清理、 验证及持久化(例如存取到数据库中)。 更多内容查看 Item Pipeline
    • Downloader Middlewares(下载器中间件):下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的Response(也包括引擎传递给下载器的Request),即处理下载请求。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看Downloader Middleware
    • Spider middlewares(爬虫中间件):Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理Spider的输入(Response)和输出(Items及Requests),即处理解析。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看 Spider Middleware

    2. 数据流(Data Flow)

    1. 引擎打开一个网站(open a domain),找到处理该网站的Spiders并向该Spiders请求第一个要爬取的URL(s)。
    2. 引擎从Spiders中获取到第一个要爬取的URL(s)并在调度器(Scheduler)以Request调度。
    3. 引擎向调度器请求下一个要爬取的URL(s)。
    4. 调度器返回下一个要爬取的URL(s)给引擎,引擎将URL(s)通过下载中间件(请求(Request)方向)转发给下载器(Downloader)。
    5. 一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(Response)方向)发送给引擎。
    6. 引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spiders处理。
    7. Spiders处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。
    8. 引擎将(Spiders返回的)爬取到的Item推送给Item Pipelines,将(Spiders返回的)Request推送给调度器。
    9. (从第二步)重复直到调度器中没有更多的Request,引擎关闭该网站。

    3. 使用Scrapy框架爬虫的重要命令

    创建项目:scrapy startproject xxx (项目名)
    进入项目:cd xxx 
    基本爬虫:scrapy genspider xxx(爬虫名) xxx.com (爬取域) 
    规则爬虫:scrapy genspider -t crawl xxx(爬虫名) xxx.com (爬取域) 
    运行命令:scrapy crawl xxx(项目名) -o xxx(项目名).json
    

    4. Middlewares主要方法

    1. Spider Middlewares: 处理解析Items的相关逻辑修正,比如数据不完整要添加默认,增加其他额外信息等

    • process_spider_input(response, spider):当Response通过spider中间件时,该方法被调用,处理该Response。
    • process_spider_output(response, result, spider):当Spider处理Response返回result时,该方法被调用。
    • process_spider_exception(response, exception, spider):当spider或(其他spider中间件的) process_spider_input()抛出异常时, 该方法被调用。

    2. Downloader Middlewares:处理发出去的请求(Request)和返回结果(Response)的一些回调

    • process_request(request, spider):当每个request通过下载中间件时,该方法被调用,这里可以修改UA,代理,Refferer
    • process_response(request, response, spider): 这里可以看返回是否是200加入重试机制
    • process_exception(request, exception, spider):这里可以处理超时

    参考:https://blog.csdn.net/baidu_32542573/article/details/79415947
        https://blog.csdn.net/qq_37143745/article/details/80996707

  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/yueyun00/p/10478640.html
Copyright © 2011-2022 走看看