Xpath获取带有子标记的父标记

时间:2017-07-06 20:18:22

标签: python html xml xpath css-selectors

我正在抓一个网站而且该网站没有以良好的方式组织信息,就像有时称为“传输”和“引擎类型”的字段,有时那些不存在,问题是每个内部的一切都是< strong> p tags , span标记,标题为传输引擎类型

如果我告诉你,你可以更好地理解

有时会有某些字段,有时候没有

enter image description here

此处发动机类型和变速器存在于车辆信息中

enter image description here

此处车辆信息中不存在发动机类型和变速器

并且没有任何具体方法来映射所有网页的字段 如果我尝试使用此xpath

尝试访问引擎类型文本,则会切换字段
'.//div[@id="result"]/div[@class="details"][2]/p[2]/text()'

最大时间我获得不同的值会导致p标签中的值被切换,所以有时我会使用此xpath进行传输,有时我会使用此xpath获取引擎类型

所以我认为他们可以通过它们旁边的跨度标题来获得所需的字段吗?

像这样

<div class="details">
    <p><span class="label">Chassis/VIN #:</span>017S</p>
    <p><span class="label">Displacement:</span>0 </p>
    <p><span class="label">Odometer:</span>79,111</p>
    <p><span class="label">Condition:</span><a href="#condition-rating">2-</a>
    </p>
    <p><span class="label">Body Style:</span>coupe</p>
</div>

每个 p 标记都有 span 标记作为标题,有没有办法通过获取 p 标记数据span 标签标题?

例如,我可以使用 span 标记标题文字引擎类型获取 p 标记的文字引擎类型

有一种方法可以在xpath中按文本获取项目

"//*[contains(text(), 'The Text Associated With The Element')]/text()"

有没有办法在这里实现这样的东西?

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式获取标题/价值对列表:

//div[@class="details"]/p//text()

输出:

Chassis/VIN #: 
017S
Displacement: 
0 
Odometer: 
79,111
Condition: 
2-  
Body Style: 
coupe

如果您想按标题获取特定值,例如"Odometer:"

//div[@class="details"]/p[span="Odometer:"]/text()

输出:

79,111