我想使用XPath获取信息。
<table class="table">
<tr>
<td style="border: 1px solid blue; background-color:red;">
<p>Detail</p>
</td>
</tr>
<tr>
<th>Title 1</th>
<td style="border: 1px solid blue;">AAA</td>
<td style="border: 1px solid blue;">LIST.AAA</td>
</tr>
<tr>
<th>Title 2</th>
<td style="border: 1px solid blue;">BBB</td>
<td style="border: 1px solid blue;">LIST.BBB</td>
</tr>
<tr>
<th>Title 3</th>
<td style="border: 1px solid blue;">CCC</td>
<td style="border: 1px solid blue;">apple</td>
</tr>
<tr>
<th>Title 4</th>
<td style="border: 1px solid blue;">DDD</td>
<td style="border: 1px solid blue;"></td>
</tr>
<tr>
<th>etc</th>
<td style="width:40%;">test</td>
<td style="border: 1px solid blue;"></td>
</tr>
</table>
th
包含字符串“ Title” /(“ tr”,条目中的“ th”带有“ title”)td[2]
必须具有“。” (点)td[2]
是否具有字符串'apple'td[2]
是否包含空格我尝试:
node = table_html.xpath('//*[@class="table"]/tr[(contains(child::th, \'Title\'))]')]
td1 = node.xpath('child::td[@style="border: 1px solid blue;"][1]/text()')
td2 = node.xpath('child::td[@style="border: 1px solid blue;"][2]/text()[not(contains(text(), \'\'))]')
td2 = node.xpath('child::td[@style="border: 1px solid blue;"][2]/text()[. != \'\']')
td2 = node.xpath('child::td[@style="border: 1px solid blue;"][2]/text()[(. != \'\')]')
etc...
我想要的输出:
td[1] / td[2]
AAA / LIST_AAA
BBB / LIST_BBB
但实际输出是:
td[1] / td[2]
AAA / LIST_AAA
BBB / LIST_BBB
CCC / trash
DDD /
答案 0 :(得分:0)
这是您可以使用的xpath。
td [1]的xpath:
//table[@class='table']//tr[th[contains(.,'Title')]][td[2][contains(.,'.')][not(contains(.,'apple'))][string-length(.)>0]]/td[1]
td 2的xpath:
//table[@class='table']//tr[th[contains(.,'Title')]][td[2][contains(.,'.')][not(contains(.,'apple'))][string-length(.)>0]]/td[2]
具有2个输出的单个xpath:
//table[@class='table']//tr[th[contains(.,'Title')]][td[2][contains(.,'.')][not(contains(.,'apple'))][string-length(.)>0]]/concat(./td[1]/text(),"/",./td[2]/text())