一、深度    

配置文件 settings.py

DEPTH_LIMIT = 5

二、优先级

配置文件

DEPTH_PRIORITY=1

优先级为正数时,随着深度越大,优先级越低

源码中,优先级

request.priority -= depth * self.prio

三、源码分析

1、深度

class QuoteSpider(scrapy.Spider):
name = 'quote'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/'] def start_requests(self):
for url in self.start_urls:
yield Request(url=url, callback=self.parse) def parse(self, response):
# response.request.meta = None
# from scrapy.http import Response
# response.request.meta ->response.meta
from scrapy.spidermiddlewares.depth import DepthMiddleware
print(response.request.url, response.meta.get('depth'))
next_url = response.xpath('//div[@class="col-md-8"]/nav/ul[@class="pager"]/li[@class="next"]/a/@href').extract_first()
# print(next_url)
# 拼接url
_next = response.urljoin(next_url)
# print(_next)
# callback 回调函数
yield scrapy.Request(url=_next, callback=self.parse)

前提:scrapy yield request对象 -> 中间件 ->调度器...

yield Request对象没有设置meta的值,meta默认为None

parse方法中的respone.request相当于request对象->response.request.meta=None

from scrapy.http import Response ->response.meta 等价于 response.request.meta --->response.meta=None

DepthMiddleware中间件->如果'depth'不在response.meta,那么response.meta['depth'] = 0

# result是存放request对象的列表,通过_filter进行过滤
# 返回 True,存放到调度器
# 返回 False, 丢弃
return (r for r in result or () if _filter(r))

超出最大深度,返回False

# 在配置文件,设置最大深度
maxdepth = settings.getint('DEPTH_LIMIT')

2、优先级

待续...

Scrapy深度和优先级的更多相关文章

  1. python - scrapy 爬虫框架 ( 起始url的实现,深度和优先级,下载中间件 )

    1.  start_urls  --  起始URL 的内部实现(将迭代器转换为生成器) class QSpider(scrapy.Spider): name = 'q' allowed_domains ...

  2. Netflix工程总监眼中的分类算法:深度学习优先级最低

    Netflix工程总监眼中的分类算法:深度学习优先级最低 摘要:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain根据奥卡姆剃刀原理依次推荐了逻辑回归.SVM.决策树 ...

  3. scrapy初步解析源码即深度使用

    scrapy深度爬虫 ——编辑:大牧莫邪 本章内容 深度爬虫概述 scrapy Spider实现的深度爬虫 scrapy CrawlSpdier实现的深度爬虫 案例操作 课程内容 1. 深度爬虫概述 ...

  4. 解读Scrapy框架

    Scrapy框架基础:Twsited Scrapy内部基于事件循环的机制实现爬虫的并发.原来: url_list = ['http://www.baidu.com','http://www.baidu ...

  5. scrapy框架 小知识

    持久化 去重规则 深度 cookie start_url 深度和优先级 下载中间件 持久化 步骤 pipeline/items a. 先写pipeline类 class XXXPipeline(obj ...

  6. Python Scrapy爬虫速成指南

    序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容. 本文受众:没写过爬虫的萌新. 入门 0.准备工作 需要准备的东西: Python.scrapy.一个IDE或者随便 ...

  7. python爬虫使用scrapy框架

    scrapy框架提升篇 关注公众号"轻松学编程"了解更多 1.创建启动爬虫脚本 在项目目录下创建start.py文件: 添加代码: #以后只要运行start.py就可以启动爬虫 i ...

  8. 2.python知识点总结

    1.什么是对象?什么是类? 对象是对类的具体表达,类是对象的抽象表达. 类只是为所有的对象定义了抽象的属性与行为. —————————————————————————————————————————— ...

  9. Python-S9-Day127-Scrapy爬虫框架2

    01 今日内容概要 02 内容回顾:爬虫 03 内容回顾:并发和网络 04 Scrapy框架:起始请求定制 05 Scrapy框架:深度和优先级 06 Scrapy框架:内置代理 07 Scrapy框 ...

随机推荐

  1. H3C 迭代查询

  2. MV*模式

    MV*模式 MVC框架最早出现在Java领域,然后慢慢在前端开发中也被提到,后来又出现了MVP,以及现在最成熟的MVVM. MVC model 数据模型 view 视图 controller 控制器 ...

  3. C++ 图片格式转化和压缩

    在做人脸识别底库图片导入的时候,需要支持主流的图片的格式,如jpeg.bmp.png等格式.所以需要对图片进行格式转化.图片过大的话,还有进行缩放等.本文介绍的是利用cximage开源库,来进行对图片 ...

  4. 【record】#10

    反正最近就一直在1600分左右徘徊;好想回蓝名啊

  5. C#面试题整理(不带答案)

     1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么?  2.什么是事务?什么是锁?  3.什么是索引,有什么优点?  4.视图是什么?游标是什么?  5.什么是存储过程?有什么优 ...

  6. Pandas处理缺失数据

    利用pandas.DataFrame.dropna处理含有缺失值的数据 1.使用形式: DataFrame.dropna(axis=0, how='any', thresh=None, subset= ...

  7. HolidayFileDisPersonViewList.js中的一些基础

    1,CSS display 属性 使段落生出行内框: p.inline { display:inline; } none 此元素不会被显示 详细介绍:  http://www.w3school.com ...

  8. 作业要求 20191010-1 Alpha阶段贡献分配规则

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8744 贡献分分配规则: 小组五位成员,每位成员有入团队贡献分10分,每个 ...

  9. 数据库中间件分片算法之stringhash

    前言 又是一个夜黑风高的晚上,带上无线耳机听一曲.突然很感慨一句话:生活就像心电图,一帆风顺就证明你挂了. 就如同我们干运维的,觉得很简单的事情,有时候能干出无限可能.还是言归正传吧,这一次我们来说说 ...

  10. 洛谷$P3877\ [TJOI2010]$打扫房间 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 昂考虑把题目的约束条件详细化?就说每个格点能向四连通连边,问能否做到每个格点度数等于2? $umm$就先黑白染色建两排点呗,然后就$S$向左侧连流量为2的边 ...