2017-02-14 17 views
0

Я пытаюсь разобрать этот HTML.Scrapy не обрабатывает TBODY в селекторе Xpath и CSS

<table id="ctl00_LeftColumnMiddle_Table1" border="0"> 
    <tbody> 
     <tr> 
      <td> 
       <table border="0"> 
        <tbody> 
         <tr> 
          <td >Contractor Name</td><td>UNITED RENTALS HIGHWAY TECHNOLOGIES INC</td> 
         </tr> 

        </tbody> 
       </table> 
      </td> 
     </tr> 
     <tr> 
      <td><table border="0"> 
        <tbody> 
         <tr> 
          <td >Contractor Name</td><td>UNITED RENTALS NORTHWEST INC</td> 
         </tr> 

        </tbody> 
       </table> 

      </td> 
     </tr> 
    </tbody> 
</table> 

Он имеет несколько ТЕ в #ctl00_LeftColumnMiddle_Table1 и имеет table внутри каждого tr

Я хочу, чтобы обрабатывать каждую запись (ТР на самом деле), а затем обработать детали каждой записи.

Я пробовал эти селекторы/Xpaths.

Selector(response).xpath('//*[@id="ctl00_LeftColumnMiddle_Table1"]/tbody/tr') 

и

Selector(response).css('#ctl00_LeftColumnMiddle_Table1 > tbody >tr') 

Но это не возвращает никаких результатов.

Но если я

Selector(response).css('#ctl00_LeftColumnMiddle_Table1 tr') 

Но это выражение также выбирает внутренние tr с с Contractor Name тоже.

Это ошибка в Scrapy?

Если это так, есть ли другой способ обработки записей так, как я хочу?

+0

'tbody' - это тег, который генерируется автоматически, поэтому вам лучше не использовать его в селекторах. – Andersson

ответ

-1
In [2]: from scrapy.selector import Selector 

In [3]: sel = Selector(text=text) 

In [4]: sel.xpath('//*[@id="ctl00_LeftColumnMiddle_Table1"]/tbody/tr') 
Out[4]: 
[<Selector xpath='//*[@id="ctl00_LeftColumnMiddle_Table1"]/tbody/tr' data='<tr>\n   <td>\n    <t'>, 
<Selector xpath='//*[@id="ctl00_LeftColumnMiddle_Table1"]/tbody/tr' data='<tr>\n   <td><table border="0">\n'>] 

вы xpath работает.

воспользуйтесь view(response), чтобы открыть ответ в браузере, убедитесь, что тег существует в ответе.

0

Я сделал это с

Selector(response).xpath('//*[@id="ctl00_LeftColumnMiddle_Table1"]/tr') 

или

Selector(response).css('#ctl00_LeftColumnMiddle_Table1 > tr') 

Это происходит потому, что tbody является тег автоматически добавляет браузеры, такие как Firefox и Chrome.

Но когда соскабливание с помощью Scrapy, tbody не было в response HTML.

+0

Важная часть состоит в том, что в исходной структуре html, с которой вы переходите, с помощью xpath может существовать« тём ». Он автоматически добавляется браузерами в DOM. –

 Смежные вопросы

  • Нет связанных вопросов^_^