xpath () возвращает список пустых файлов [] - PullRequest
0 голосов
/ 04 февраля 2019

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">

возвращает ноль [] для следующих

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

, но приведенный ниже код отлично работает с ответом: ['>]

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

1 Ответ

0 голосов
/ 04 февраля 2019

Для first xpath //*[@class="dataContainer"]/a/@href

// - это ось потомка или самого себя, тогда как / является прямым потомком текущего узла.В этом случае a не является прямым ребенком, поэтому вам нужно использовать //:

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

second path //*[@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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...