python - 抓取我不想但不知道如何排除的链接
问题描述
假设我有这个结构
<div data-next="link0">
<a href="link1"/>
<a href="link2"/>
<a href="link3"/>
<a href="link4"/>
</div>
并且我的规则对象只想访问link0,而不访问link1、link2、link3、link4。
我怎样才能做到这一点?
我试过了
Rule(LinkExtractor(restrict_xpaths=('//div[@data-next]/@data-next')), callback='parse_item'),
但它不起作用,因为我需要一个元素的引用,而不是直接的链接。但是如果我删除@data-next,link1、link2、link3、link4 也会被刮掉。
那么,有没有办法在这种情况下使用 Rule 对象来抓取 link0 ?
解决方案
Rule(LinkExtractor(restrict_xpaths='//div[@data-next]', tags='div', attrs='data-next'), callback='parse_item'),
LinkExtractor
默认情况下查找<a>
标签和@href
属性。在这种情况下,您已经指定了它应该在搜索中包含哪些标签和属性。更多来自Scrapy 文档:
参数:
(...)
tags (str or list) – 提取链接时要考虑的标签或标签列表。默认为
('a', 'area')
.attrs (list) – 查找要提取的链接时应考虑的属性或属性列表(仅适用于 tags 参数中指定的那些标签)。默认为
('href',)
推荐阅读
- python - Python - 列表的字典 - 为每个唯一的列表元素找到关联的键
- spring-boot - 在外部任务处理程序中接收 Camunda 活动名称
- c# - c# 允许 list.add 中的重复项
- flutter - 通过添加 void 函数,它不会调用 statlessWidget 的 build 方法
- javascript - “flex: 1 1 0%” 带有适应其大小的画布子项无法正常工作
- nlog - NLog、ASP.NET Core 5.0、ClearProviders 和使用 OutputDebugString 的区别
- paramiko - 如何使用 paramiko 打开真正的终端窗口?
- .net - 如何使用 Oracle.DataAccess 安全地安装包
- java - 多模块项目 - gradle build 卡住
- angular - Angular 使用带有 Jasmine TypeError 的 Karma:this.Service。
不是 Lifecycle Hook 中的函数