<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之前的所有元素?我想要一个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>

要选择pwithdiv下最后一个id="something"元素前面的所有同级元素,请使用此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

07-25 22:29
查看更多