Scrapy深度和优先级
2024-09-06 00:23:51
一、深度
配置文件 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、优先级
待续...
最新文章
- SSH框架整合(XML)
- 。tar.gz(bz或bz2等)安装
- MyEclipse定位class文件
- JAVA学习<;六>;
- iOS数组使用
- C#中无边框窗体移动
- 配置 ASP.NET Linux( CentOS 6.5 ) 运行环境 MONO + Jexus
- Spring Boot修改内置Tomcat端口号 (zhuan)
- jqGrid 设置列宽
- 新安装XAMPP,phpMyAdmin错误:#1045 - Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO)
- Spring MVC 解读——@RequestMapping (1)(转)
- Mysql中的force index和ignore index
- Error:dojo.data.ItemFileWriteStore:Invalid item argument
- Windows10家庭版运行应用提示”管理员已阻止你运行此应用...“的解决办法
- css3选择器和伪类
- html5页面拨打电话实现的方法
- 用Python来玩微信跳一跳
- mysql 内存表
- B-spline Curves 学习前言与动机(1)
- 【问题】 cookie 不保存特殊字符 解决办法
热门文章
- 牛客小白月赛15A 斑羚飞渡
- dotnet core 集成到 Mattermost 聊天工具
- Wanafly 挑战赛 14 E 无效位置 (线性基+并查集)
- P3157 动态逆序对 CDQ分治
- Visual Studio Team Services使用教程【4】:默认团队checkin权限修改
- Python实现截图功能
- __str__、__repr__和__format__
- mac系统Docker安装Redis教程
- vc++ 监控指定路径下文件变化
- $POJ2411\ Mondriaan&#39;s\ Dream$ 状压+轮廓线$dp$