如何选择所有子文本但使用Scapy的XPath排除标记?

我有这个HTML

Box"> information Titleinformation Text

我想获取< div id =“content”>中的所有文字在Scrapy中使用XPath但不包括< div class =“infobox”>的内容,因此预期结果如下:

Title 1


Sub-Title 1


Descripton 1.

Descripton 2.


Sub-Title 2


Descripton 1.
Descripton 2.

但是我还没有达到排除部分,我仍然在努力从< div id =“content”>中获取文本.

我试过这个:

response.xpath('//*[@id="content"]/text()').extract()

但它只从子标题返回描述1.和描述2.

然后我尝试了:

response.xpath('//*[@id="content"]//*/text()').extract()

它仅返回标题1,子标题1,子标题2,信息标题和长信息文本.

所以这里有两个问题:

>我如何从内容div中获取所有儿童文本?
>如何从选择中排除信息框div?

最佳答案
使用descendant :: axis查找后代文本节点,并明确声明这些文本节点的父节点不能是div [@ class =’infoBox’]元素.

将上述内容转换为XPath表达式:

//div[@id = 'content']/descendant::text()[not(parent::div/@class='infoBox')]

然后,结果类似于(我使用在线XPath工具测试)以下内容.如您所见,div [@ class =’infoBox’]的文本内容不再出现在结果中.

-----------------------
Title 1
-----------------------
-----------------------
Sub-Title 1
-----------------------
-----------------------
Description 1.
-----------------------
Description 2.
-----------------------
-----------------------
Sub-Title 2
-----------------------
-----------------------
Description 1
-----------------------
Description 2
-----------------------
-----------------------
-----------------------

你的方法有什么问题?

你的第一次尝试:

//*[@id="content"]/text()

用简单的英语表示:

Look for any element (not necessarily a div) anywhere in the document,that has an attribute @id,its value being “content”. For this element,return all its immediate child text nodes.

问题:您正在丢失不是外部div的直接子节点的文本节点,因为它们位于该div的子元素内.

你的第二次尝试:

//*[@id="content"]//*/text()

翻译为:

Look for any element (not necessarily a div) anywhere in the document,find any descendant element node and return all text nodes of that descendant element.

问题:您正在丢失div的直接子文本节点,因为您只查看作为div后代的元素的子节点的文本节点.

编辑:

回应你的评论

//div[@id = 'content']/descendant::text()[not(ancestor::div/@class='infoBox')]

对于您将来的问题,请确保您显示的HTML代表您的实际问题.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些