从XPath

时间:2019-06-05 21:57:30

标签: html xpath

我想使用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>
 

  1. th包含字符串“ Title” /(“ tr”,条目中的“ th”带有“ title”)
  2. td[2]必须具有“。” (点)
  3. 排除td[2]是否具有字符串'apple'
  4. 排除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  / 

1 个答案:

答案 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]

Chrome开发工具屏幕截图: enter image description here

具有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())

enter image description here