Scrapy CrawlSpider源码分析
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源码分析的更多相关文章
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- nginx源码分析之网络初始化
nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
随机推荐
- PHP基本随笔
1:制作一个永不重复的数字: private function getMillisecond(){ list($t1, $t2) = explode(' ', microtime()); return ...
- 调试利器GDB(下)
本节我们研究gdb更深层的用法: 数据断点: 可以根据变量的值来监视变量. 数据断点本质是硬件断点,数量有限. watch var_name告诉gdb我们关注var_name这个变量,如果它的值被改变 ...
- c++ complie link error 2019/2001
1:没有将需要的文件添加到项目中,只是考到项目所在的目录了 2:没有添加 类导出 宏
- 暗影精灵2pro——使用一年多后电池鼓包,传说中的更新BIOS问题(惠普15ax-226tx)
17年春天的时候正好赶上自己在东北一所省会城市的211大学读硕毕业,为了更新下自己的装备,同时也是为了纪念在母校读书7年的经历,遂够了一款暗影精灵2pro,如上图右侧所示,是一款颜值较高的很轻薄的笔记 ...
- xcode打包真机测试
背景:xocode版本低于真机版本 解决方法:
- 从码云上下载react项目并配置成可运行状态
(第一次写,如有不足之处,欢迎指出) 一.下载项目: 1.首先保证安装了git, 2.然后在本地想要存放项目位置打开git(Git Bash Here),再复制码云中如图所示的地址: 3.在git中输 ...
- MySQL_优化
MySQL优化(http://www.cnblogs.com/zengkefu/p/5683438.html) 1.explain+索引. 在你要查询的语句前加explain,看下有没有用到索引,如果 ...
- 关于微软小娜Cortana(安卓版)
关于微软小娜,大家都知道是微软发布的全球第一款个人智能助理.它“能够了解用户的喜好和习惯”,“帮助用户进行日程安排.问题回答等”.今天我就向大家介绍一下安卓版的小娜. 首先,和电脑版的小娜一样,安卓版 ...
- Assembly Experiment3
AIMS & PREPARATIONS of THIS EXPERIMENT: 1st point of this experiment: realize the programme t1.a ...
- centos7 升级openssh到openssh-8.0p1版本
环境介绍 centos7.3和centos7.6升级完毕测试登录ssh以及重启后登录ssh均无问题. 前期请自行配置好yum源(如果不会请百度) 整个过程不需要卸载原先的openssl包和openss ...