首页 > 解决方案 > 抓取我不想但不知道如何排除的链接

问题描述

假设我有这个结构

<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 ?

标签: pythonxpathscrapy

解决方案


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',)


推荐阅读