gpt4 book ai didi

python - 如何通过 XPath 选择最后一个 p 元素之前的所有元素?

转载 作者:数据小太阳 更新时间:2023-10-29 02:34:04 24 4
gpt4 key购买 nike

<div id="something">
<a id="dd_start">
<p>A</p
<h2>B</h2>
<p>C</p>
<h5>D</h5>
<script> </script>
<p>E</p>
<div></div>
</div>

如何获取最后一个p之前的所有元素?我想要 ph2ph5:A B C D。

我试过:

item['contents'] = ' '.join(response.xpath('//*[@id="something"]/preceding-sibling::*p//text()').extract()).strip()

item['contents'] = ' '.join(response.xpath('//*[@id="something"]/preceding-sibling::p[last()]//text()').extract()).strip()

item['contents'] = ' '.join(response.xpath('//*[@id="something"]/p[last()]/preceding-sibling::*//text()').extract()).strip()

好像不行。我的内容总是返回空的。

最佳答案

对于这个 HTML,

<div id="something">
<p/>
<h2/>
<p/>
<h5/>
<script/>
<p/>
<div/>
</div>

要使用 id="something" 选择 div 下最后一个 p 元素之前的所有兄弟元素,请使用此 XPath:

//div[@id="something"]/p[last()]/preceding-sibling::*

返回

<p/>
<h2/>
<p/>
<h5/>
<script/>

根据要求。


更新 1:对于这个更新的 HTML,

<div id="something">
<p/>A
<h2/>B
<p/>C
<h5/>D
<script/>
<p/>E
<div/>
</div>

这个 XPath

//div[@id="something"]/p[last()]/preceding-sibling::text()

现在将选择

A
B
C
D

按照您最新更新中的要求。


更新 2:如果您的 HTML 更像这样,

<div id="something">
<p>A</p>
<h2>B</h2>
<p>C</p>
<h5>D</h5>
<script/>
<p>E</p>
<div/>
</div>

这个 XPath

//div[@id="something"]/p[last()]/preceding-sibling::*/text()

现在将选择前面同级元素中的文本节点:

A
B
C
D

关于python - 如何通过 XPath 选择最后一个 p 元素之前的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com