xpath()返回emty列表[]

时间:2019-02-04 07:35:17

标签: python xml xpath

xpath为以下查询返回空列表。 需要获取UrlOne1,UrlOne2,DataOne1,DataOne,DataOne2

<table>
<thead></thead>
<tbody class="dataContainer">
    <tr class="tableLight"> 
        <td><a href="UrlOne1" class="ClassOne1">DataOne1</a></td>
        <td> <a href="UrlOne2"><span class="badge"></span> <span class="long">DataOne</span> <span class="short">DataOne</span> </a> </td>
        <td class="hide-s"><span class="ClassOneCN"></span> <span class="ClassOne2">DataOne2</span></td></tr>
    <tr class="tableLight">
    <tr class="tableLight">
    <tr class="tableLight">

为以下内容返回null []

response.xpath('//*[@class="dataContainer"]/a/@href') 
response.xpath('//*[@class="tableLight"]')
response.xpath('//*[local-name() = "tr" and class="tableLight"]') 

但是下面的代码可以很好地回答:['>]

response.xpath('//*[@class="dataContainer"]') 

1 个答案:

答案 0 :(得分:1)

对于第一个 xpath //*[@class="dataContainer"]/a/@href

//是后代或自身轴,而/是当前节点的直接子代。在这种情况下,a不是直子,因此您需要使用//

//*[@class="dataContainer"]//a/@href

第二路径//*[@class="tableLight"]应该可以,但是如果您知道它是tr标记,请使用它:

//tr[@class="tableLight"]

对于第三个xpath //*[local-name() = "tr" and class="tableLight"] class是一个属性,因此您需要使用@class(但我建议改用上面的xpath):

//*[local-name() = "tr" and @class="tableLight"]

根据您的需求(UrlOne1, UrlOne2, DataOne1, DataOne, DataOne2),您可以像这样a获得response.xpath('//tr[@class="tableLight"]//a')元素,然后为每个{{ 1}}元素。
或直接获取href属性和文本:

a