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