首页 > 解决方案 > Scrapy:使用 CSS 选择器排除节点/标签

问题描述

在文档和 SO 文章中,只有关于如何使用此命名法排除 CSS 类的参考:

response.css("div[id='content']:not([class*='infobox'])")

然而,我想要实现的是排除一个节点,甚至排除多个节点,例如<span>元素<div>内部的<li>元素。

让我给你举个例子。假设我正在抓取这个 HTML:

<li class="classA">
  <div class="classB">
    ..
  </div>

  <span class="classC">Whatever</span>

  This is the string I want to scrape
</li>

,而且我只对抓取文本“这是我要抓取的字符串”感兴趣,因此我想跳过<div><span>节点。我尝试在scrapy shell中使用以下内容,但无济于事:

response.css(".classA:not(span|div)::text").extract()

,但我仍然得到排除的节点。

标签: pythonscrapy

解决方案


这很容易:

1.使用css选择器

response.css('li.classA::text').extract_first()

2.使用xpath选择器

response.xpath('//li[@class = "classA"]/text()').extract_first()

推荐阅读