<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>
要选择
p
withdiv
下最后一个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