一、深度    

配置文件 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、优先级

待续...

最新文章

  1. SSH框架整合(XML)
  2. 。tar.gz(bz或bz2等)安装
  3. MyEclipse定位class文件
  4. JAVA学习<六>
  5. iOS数组使用
  6. C#中无边框窗体移动
  7. 配置 ASP.NET Linux( CentOS 6.5 ) 运行环境 MONO + Jexus
  8. Spring Boot修改内置Tomcat端口号 (zhuan)
  9. jqGrid 设置列宽
  10. 新安装XAMPP,phpMyAdmin错误:#1045 - Access denied for user 'root'@'localhost' (using password: NO)
  11. Spring MVC 解读——@RequestMapping (1)(转)
  12. Mysql中的force index和ignore index
  13. Error:dojo.data.ItemFileWriteStore:Invalid item argument
  14. Windows10家庭版运行应用提示”管理员已阻止你运行此应用...“的解决办法
  15. css3选择器和伪类
  16. html5页面拨打电话实现的方法
  17. 用Python来玩微信跳一跳
  18. mysql 内存表
  19. B-spline Curves 学习前言与动机(1)
  20. 【问题】 cookie 不保存特殊字符 解决办法

热门文章

  1. 牛客小白月赛15A 斑羚飞渡
  2. dotnet core 集成到 Mattermost 聊天工具
  3. Wanafly 挑战赛 14 E 无效位置 (线性基+并查集)
  4. P3157 动态逆序对 CDQ分治
  5. Visual Studio Team Services使用教程【4】:默认团队checkin权限修改
  6. Python实现截图功能
  7. __str__、__repr__和__format__
  8. mac系统Docker安装Redis教程
  9. vc++ 监控指定路径下文件变化
  10. $POJ2411\ Mondriaan's\ Dream$ 状压+轮廓线$dp$