一.scrapy架构介绍

  1.结构简图:

    主要组成部分:Spider(产出request,处理response),Pipeline,Downloader,Scheduler,Scrapy Engine

  2.结构详细图:

    主要步骤(往复循环):

        1.Spiders(自己书写的爬虫逻辑,处理url及网页等【spider genspider -t 指定模板  爬虫文件名 域名】),返回Requests给engine——>

        2.engine拿到requests返回给scheduler(什么也没做)——>

        3.然后scheduler会生成一个requests交给engine(url调度器)——>

        4.engine通过downloader的middleware一层一层过滤然后将requests交给downloader——>

        5.downloader下载完成后又通过middleware过滤将response返回给engine——>

        6.engine拿到response之后将response通过spiders的middleware过滤后返回给spider,然后spider做一些处理(如返回items或requests)——>

        7.spiders将处理后得到的一些items和requests通过中间件过滤返回给engine——>

        8.engine判断返回的是items或requests,如果是items就直接返回给item pipelines,如果是requests就将requests返回给scheduler(和第二步一样)       

    

    源码简介: 

源码核心的东西

      engine.py中介绍:通过_next_request_from_scheduler判断是否有requests(request返回给engine直接返回给scheduler【第一步】),request会首先调用schedule()函数发送给schedule(第二步),然后返回给engine

      downloader简介:

可以处理很多类型的下载

    Request和Response简介:

class Request(object_ref):

    def __init__(self, url, callback=None, method='GET', headers=None, body=None,
cookies=None, meta=None, encoding='utf-8', priority=0,
dont_filter=False, errback=None, flags=None):
......

      官网介绍(具体官网网址:https://doc.scrapy.org/en/latest/topics/request-response.html):

参 数:
  • url字符串) - 此请求的URL
  • callbackcallable) - 将使用此请求的响应(一旦下载)调用的函数作为其第一个参数。有关更多信息,请参阅下面将其他数据传递给回调函数。如果请求未指定回调,则将使用spider的 parse()方法。请注意,如果在处理期间引发异常,则会调用errback。
  • methodstring) - 此请求的HTTP方法。默认为'GET'
  • metadict) - Request.meta属性的初始值。如果给定,则此参数中传递的dict将被浅层复制。
  • bodystr unicode) - 请求体。如果a unicode被传递,则str使用传递的编码(默认为utf-8)对其 进行编码。如果 body未给出,则存储空字符串。无论此参数的类型如何,存储的最终值都是str(从不 unicodeNone)。
  • headersdict) - 此请求的标头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)。如果 None作为值传递,则根本不会发送HTTP标头。
  • cookies(字典清单) -

    请求cookie。这些可以以两种形式发送。

    1. 使用词典:

      request_with_cookies = Request(url="http://www.example.com",
      cookies={'currency': 'USD', 'country': 'UY'})
    2. 使用dicts列表:
      request_with_cookies = Request(url="http://www.example.com",
      cookies=[{'name': 'currency',
      'value': 'USD',
      'domain': 'example.com',
      'path': '/currency'}])

    后一种形式允许自定义 cookie的属性domainpath属性。这仅在保存cookie以供以后请求时才有用。

    当某个站点返回cookie(在响应中)时,这些cookie存储在该域的cookie中,并将在将来的请求中再次发送。这是任何常规Web浏览器的典型行为。但是,如果由于某种原因,您希望避免与现有Cookie合并,则可以通过将dont_merge_cookies密钥设置为True 来指示Scrapy执行此操作 Request.meta

    不合并cookie的请求示例:

    request_with_cookies = Request(url="http://www.example.com",
    cookies={'currency': 'USD', 'country': 'UY'},
    meta={'dont_merge_cookies': True})
  • encoding字符串) - 此请求的编码(默认为'utf-8')。此编码将用于对URL进行百分比编码并将正文转换为str(如果给定unicode)。
  • priorityint) - 此请求的优先级(默认为0)。调度程序使用优先级来定义用于处理请求的顺序。具有更高优先级值的请求将更早执行。允许使用负值以指示相对较低的优先级。
  • dont_filterboolean) - 表示调度程序不应过滤此请求。当您想要多次执行相同的请求时,可以使用此选项来忽略重复过滤器。小心使用它,否则您将进入爬行循环。默认为False
  • errbackcallable) - 在处理请求时引发任何异常时将调用的函数。这包括因404 HTTP错误而失败的页面等。它接收Twisted Failure实例作为第一个参数。有关更多信息,请参阅下面的使用errbacks捕获请求处理中的异常。
  • flagslist) - 发送给请求的标志,可用于日志记录或类似目的。
class Response(object_ref):

    def __init__(self, url, status=200, headers=None, body=b'', flags=None, request=None):
self.headers = Headers(headers or {})
self.status = int(status)
self._set_body(body)
self._set_url(url)
self.request = request
self.flags = [] if flags is None else list(flags)
......
参数:
  • url字符串) - 此响应的URL
  • status整数) - 响应的HTTP状态。默认为200
  • headersdict) - 此响应的标头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)。
  • body字节) - 响应主体。要将解码后的文本作为str(Python 2中的unicode)访问,您可以使用response.text来自编码感知的 Response子类,例如TextResponse
  • flags列表) - 是包含Response.flags属性初始值的列表 。如果给定,列表将被浅层复制。
  • requestRequestobject) - Response.request属性的初始值。这表示Request生成此响应的内容。

scrapy架构简介的更多相关文章

  1. 爬虫基础(五)-----scrapy框架简介

    ---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...

  2. LoadRunner系统架构简介

    1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...

  3. crtmpserver的架构简介

    crtmpserver的架构简介 一.层 Layers . 机器层 Machine layer . 操作系统层 Operating System Layer   This layer is compo ...

  4. Extjs6官方文档译文——应用架构简介(MVC,MVVM)

    应用架构简介 Extjs 同时提供对于MVC和MVVM应用架构的支持.这两个架构方式共享某些概念,而且都旨在沿着逻辑层面划分应用程序代码.每种方法在选择如何划分应用组件上都有其各自的优势. 本指南的目 ...

  5. scrapy架构初探

    scrapy架构初探 引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是"开放的思想",聚合最好的想法.技术.人员, ...

  6. Scrapy架构概述

    Scrapy架构概述 1, 从最初自己编写的spiders,获取到start_url,并且封装成Request对象. 2,通过engine(引擎)调度给SCHEDULER(Requests管理调度器) ...

  7. Kafka:架构简介【转】

    转:http://www.cnblogs.com/f1194361820/p/6026313.html Kafka 架构简介 Kafka是一个开源的.分布式的.可分区的.可复制的基于日志提交的发布订阅 ...

  8. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图

    第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...

  9. Python -- Scrapy 架构概览

    架构概览 本文档介绍了Scrapy架构及其组件之间的交互. 概述 接下来的图表展现了Scrapy的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示). 下面对每个组件都做了简单介绍,并给出了详 ...

随机推荐

  1. P1460 健康的荷斯坦奶牛 Healthy(DFS)

    思路:这道题还是用了小小的剪枝,这里要注意的是该题有很多中构建树的顺序,但是,在这众多顺序中不一定都能保证输出的方案字典序最小. 构建搜索树:如图构建 剪枝,emmm,看代码: #include< ...

  2. 1043. 输出PATest(20)

    1043. 输出PATest(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个长度不超过10000 ...

  3. (七)JavaScript 函数

    带有返回值的函数 JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在函数运行以后被删除. 全局变量会在页面关闭后被删除.

  4. P2257 YY的GCD--洛谷luogu

    传送门 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻×必然不 ...

  5. 条件随机场Conditional Random Field-CRF入门级理解

    条件随机场Conditional Random Field-CRF入门级理解   有向图与无向图模型 CRF模型是一个无向概率图模型,更宽泛地说,它是一个概率图模型.现实世界的一些问题可以用概率图模型 ...

  6. 20175330 2018-2019-2 《Java程序设计》第八周学习总结

    # **教材学习内容总结### 本周学习<Java程序设计>第十五章:*** 泛型: 泛型(Generics)的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构.泛型类 ...

  7. KakfaSpout自定义scheme

    一.Mapper和Scheme scheme:将kafka传到spout里的数据格式进行转化. record->tuple mapper:将storm传到kafka的数据格式进行转化.tuple ...

  8. pycharm 安装和首次使用

    由于本人也是开发语言的学习小白,所以对于开发时使用的工具也不算太熟悉,不过这里还是要推荐一下本人使用过 的两款工具: 1.pycharm  :2.eclipse 这是我用的比较顺手的两个工具当然这两个 ...

  9. 牛客练习赛35 C.函数的魔法

    链接 [https://ac.nowcoder.com/acm/contest/32] 题意 题目描述 一位客人来到了此花亭,给了女服务员柚一个数学问题:我们有两个函数,F(X)函数可以让X变成(XX ...

  10. python获取当前日期时间

    转载自:https://www.cnblogs.com/wenBlog/p/6023742.html 在Python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函 ...