xpath()返回emty list[]

2024-09-26 22:13:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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"]') 

Tags: responsexpathtrclasstdhrefspandataone
1条回答
网友
1楼 · 发布于 2024-09-26 22:13:51

对于第一个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'),然后检索每个a元素的href属性或文本。
或者直接获取href属性和文本:

//tr[@class="tableLight"]//a/@href
//tr[@class="tableLight"]//a//text()

相关问题 更多 >

    热门问题