Xpath 遵循所有p标记,除非出现其他类型的同级,否则停止

Xpath 遵循所有p标记,除非出现其他类型的同级,否则停止,xpath,scrapy,Xpath,Scrapy,我想跟随标记,除非出现任何其他类型的兄弟姐妹 案例1: <p>a</p> <p>b</p> <h3>Foo</h3> <p>c</p> <p>a</p> <p>b</p> <h2>Foo</h2> <p>c</p> 但在没有h3但h2 所以我在寻找一个逻辑,除非它找到了p以外的任何其他标记,否则它会一直

我想跟随
标记,除非出现任何其他类型的兄弟姐妹

案例1:

<p>a</p>
<p>b</p>
<h3>Foo</h3>
<p>c</p>
<p>a</p>
<p>b</p>
<h2>Foo</h2>
<p>c</p>
但在没有
h3
h2

所以我在寻找一个逻辑,除非它找到了
p
以外的任何其他标记,否则它会一直跟随,因为它可能是
h1
h2
h3
等等

所以在这两种情况下,我只想选择a和b


我的代码正在循环中运行,因此我没有足够的信息来说明作为同级节点将出现什么。

要仅获取前7个
p
节点(前面的
同级节点),可以尝试以下XPath:

//div[@class='mw-parser-output']/p[following-sibling::div[@id='toc']]

首先检查你在
响应中得到了什么。body
-也许它会给你不同的页面-例如,机器人程序警告:)你的XPath工作正常,除非你是指直接的兄弟
。在这种情况下,您可以尝试
//div[@class='mw-parser-output']/p[not(以下同级::*[position()=1和name()='div'])]
它仍然返回所有
,即使是
标记apprearing@RaheelKhan,你确定吗?我已经仔细检查过了,
p
的前一个兄弟姐妹,
被跳过了。按预期工作,因此您希望获得所有
p
,除了
之前的7个,对吗?很抱歉,我正在更新更接近的问题。你能看看我的问题吗。我想在h3标签前选择
p
。它没有idOkay我知道了:)非常感谢h3[.=“Foo”]/前面的兄弟姐妹::p很抱歉再次出错。我们能做点像。。遵循
p
,除非出现任何其他类型的
节点。因为我有两个条件要遵循。一种是跟随p直到h3出现,也跟随p直到h2出现。您可以尝试
/*[不(name()=“p”)][1]/前面的兄弟姐妹::p
或更具体的
/*[name()=“h2”,“h3”)][1]/前面的兄弟姐妹::p
//div[@class='mw-parser-output']/p[following-sibling::div[@id='toc']]