我正在使用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;
答案 0 :(得分:4)
您可以使用div
和a
语法获取除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>