我试图从一个搜索结果页面收集一些信息,我之前遇到过这个逻辑问题,现在我正在寻求你的帮助。
基本上,有两种不同方式的信息表可以查看
<table>
<tr>
<th>Bolig areal</th> (estate size)
<td>0 m</td>
</tr>
<tr>
<th>Grund areal</th> (ground size)
<td>5000 m</td>
</tr>
</table>
和
<table>
<tr>
<th>Bolig areal</th> (estate size)
<td>123 m</td>
</tr>
<tr>
<th>Grund areal</th> (ground size)
<td>5000 m</td>
</tr>
</table>
我想获得&#39; bolig areal&#39;(地产规模)。但如果&#39; bolig areal&#39;是0米,然后采取Grund面积(地面大小)
我目前停留在Xpath表达式上,如:
//div[@class='description-element description-info shadow']//th[contains(.,'Grund areal') or contains(.,'Bolig areal')]/following-sibling::td/text()[not(contains(.,'0 m'))]
我同时选择<th>
,选择以下<td>/text
,其中文字为!= 0m。
选择地面区域。
如何添加&#34;如果&#39; Bolig areal&#39;不同于0米挑选&#39; Bolig areal&#39;否则使用&#39; Ground areal&#39;
溶液:
".//tr[th = 'Bolig areal' and td != '0 m' or th = 'Grund areal' and not(ancestor::table/tr[th = 'Bolig areal' and td != '0 m'])]/td/text()"
答案 0 :(得分:4)
试试这个:
//tr[th = 'Bolig areal' and td != '0 m' or th = 'Grund areal' and not(ancestor::table/tr[th = 'Bolig areal' and td != '0 m'])]/td
如果第一个表达式th = 'Bolig areal' and td != '0 m'
不是{p>},则选择具有th = 'Grund areal'
或 tr 的 tr 对于当前表格为true。从选定的 tr 中选择 td 。
答案 1 :(得分:2)
怎么样:
//table[tr[th="Bolig areal"][td != "0 m"]]/tr[th="Bolig areal"]/td/text()
|
//table[tr[th="Bolig areal"][td = "0 m"]]/tr[th="Grund areal"]/td/text()
这基本上是一个翻译:
table
包含“Bolig areal”th
的行,其值(td
)与“0 m”不同,请选择该值({{1} })td/text()
运算符),如果“Bolig areal”值为“0 m”,则从标题为“Grund areal”的行中选择值您可以使用|
代替contains(th, "Bolig areal")
使用lxml(libxml2)的示例Python会话:
th="Bolig areal"
答案 2 :(得分:0)
您想要第一个th
未跟随0 m
,然后提取第一个td
:
//th[(.='Bolig areal' and following-sibling::td!='0 m') or (.='Grund areal' and ../..//th[.='Bolig areal']/following-sibling::td='0 m')]/following-sibling::td[1]