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"]')
对于第一个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')
然后检索每个href
元素a
属性或文本。
或者直接将href
属性和文本:
//tr[@class="tableLight"]//a/@href
//tr[@class="tableLight"]//a//text()