crawl.py中主要包含两个类:

1. CrawlSpider

2. Rule

  link_extractor:传LinkExtractor实例对象

  callback:传”func_name“

  cb_kwargs=None

  follow=None    跟配置文件中CRAWLSPIDER_FOLLOW_LINKS做and,都为True才有效

  process_links=None    用于预处理url

  process_request=identity    默认调用process_request时返回process_request的参数

CrawlSpider:继承Spider类

1)入口:调用Spider类的start_requests,默认使用parse处理

2)CrawlSpider重写了Spider类的parse方法:返回调用_parse_response方法(*自定义时不能重载parse函数处理response)

3)_parse_response方法:scrapy预留了parse_start_url、process_results方法供我们自定义逻辑处理response,最后遍历process_results结果,yield(如果没重写上面的函数相当于之前什么都没执行),判断配置文件(CRAWLSPIDER_FOLLOW_LINKS=True),调用_requests_to_follow,遍历结果,yield

4)_requests_to_follow方法:调用rules中Rule的LinkExtractor的extract_links方法,抽取每一个link,并且放到集合中做了一个去重,调用_build_request创建request对象,yield Rule实例的process_request方法,传入reuqest对象作为参数(默认相当于yield Request对象)

5)_build_request方法:实例化Request(callback通过_response_downloaded获取),返回Request实例对象

6)_response_downloaded方法:拿到Rule中rule,返回_parse_response函数

7)_parse_response方法:调用rule.callback

重点:

1. 重写预留函数:parse_start_url、process_results方法

2. 自定义Rule中参数配置:process_links(预处理url)

Scrapy CrawlSpider源码分析的更多相关文章

  1. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  2. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  3. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  4. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  5. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  8. ABP源码分析二:ABP中配置的注册和初始化

    一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...

  9. ABP源码分析三:ABP Module

    Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...

随机推荐

  1. C#中简单操作SQLserver数据库(ADO.NET的简单应用)

    本篇文章以 ADO.NET 访问SQL SERVER 数据库为例, 其中需用System.Data.SqlClient; 数据库连接字符串写法为:server=数据源(服务器名称);uid=用户名;p ...

  2. 2018上C语言程序设计(高级)- 第1次作业成绩

    作业地址 https://edu.cnblogs.com/campus/hljkj/CS2017-01/homework/1638 评分准则 第一次作业各项成绩包括三项: 完成PTA所有题目:20分 ...

  3. springcould 微服务 搭建

    摘自:https://www.cnblogs.com/lori/p/10615654.html    (完整) springcloud~服务注册与发现Eureka的使用   服务注册与发现是微服务里的 ...

  4. 多线程——C++

    线程: 先说进程,进程是应用程序的执行实例,每个进程拥有其私有的虚拟地址空间.代码.数据和其它系统资源组成.进程在运行时创建的资源随着进程的终止而死亡. 而线程是一个独立的执行流,是进程内部的一个独立 ...

  5. load data local to table

    步骤: 1.使用show语句查找服务器上当前存在的数据库: 2.如果数据库存在,尝试访问它,之后创建表(我这里是之前创建的,所以就直接show tables) 3.将本地文件加载到表中,创建一个文本文 ...

  6. Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [33,755] milliseconds.

    刚部署好程序,第一次登录时,加载非常得慢,查看log日志发现:Creation of SecureRandom instance for session ID generation using [SH ...

  7. 顺序栈代码实现&&stack库

    #include<iostream> using namespace std; ; typedef int Elemtype; struct SqStack { Elemtype *bas ...

  8. MongoDB关键指标意义&各数值区间意义&部署

    ## part 1 mms图 What's MMS MongoDB Management Service (MMS) is a suite of services for managing Mongo ...

  9. Yii2 使用 QQ 和 Weibo 第三方登录源码

    我们社区在 yii2-authclient 多次升级后,登录异常.一直想寻求一种通用的方法,尽量不重写 OAuth2, BaseOAuth 以及 OAuthToken 类, 所以本次直接在 initU ...

  10. 1、Nexus安装

    1.nexus 下载地址: https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.5-02-bundle.tar.g ...