Scrapy:使用CSS选择器排除节点/标签

时间:2019-01-24 08:33:37

标签: python scrapy

在文档和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>节点。我试图在可疑的外壳中使用以下内容,但无济于事:

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

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

2 个答案:

答案 0 :(得分:1)

简单:

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

答案 1 :(得分:1)

这很简单:

1。使用CSS选择器

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

2。使用xpath选择器

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