xpath选择节点文本和子节点

时间:2014-11-24 04:56:41

标签: html xpath web-scraping scrapy

我正在使用python scrapy从网站上抓取一些数据。

网站内容是这样的

 <html>
  <div class="details">
  <div class="a"> not needed</div>
  content 1
  <p>content 2</p>
  <div>content 2</div>
  <p>content 2</p>
  <div>content 2</div>
  <p>content 2</p>
  <div class="b"> this is also not needed</div>
  </div>
 </html>

我需要获得完整的html数据,不包括div类,b。

所以我的输出就像这样

<div class="details">   
content 1
<p>content 2</p>
<div>content 2</div>
<p>content 2</p>
<div>content 2</div>
<p>content 2</p>
</div>

如何为此编写正确的xpath,或者我应该使用class&#39;详细信息&#39; a&#39;&#39; b&#39;并使用字符串为div编写xpath删除div的操作&#39; a&#39;&#39; b&#39;?

请注意,这里的内容是div的文本,并且不是div的子文,其中包含类&#39;详细信息&#39;

1 个答案:

答案 0 :(得分:4)

您可以使用diva语法获取除b课程node()self::以外的所有儿童:

//div[@class="details"]/node()[not(self::div[@class="a" or @class="b"])]

使用scrapy shell进行演示:

$ scrapy shell index.html
>>> nodes = response.xpath('//div[@class="details"]/node()[not(self::div[@class="a" or @class="b"])]').extract()
>>> print ''.join(nodes)
  content 1
  <p>content 2</p>
  <div>content 2</div>
  <p>content 2</p>
  <div>content 2</div>
  <p>content 2</p>