2017-02-10 3 views
0

Я строю простой скребок с Scrapy, но у меня возникают проблемы с извлечением определенных частей данных. Сайт содержит около 20 из следующих блоков кода:Scrapy extracting text from div

<div class="row result"> 
    <div class="updateCont date col-md-2 col-sm-2 col-xs-3"> 
     <span>  
      <strong>Fri. 10 Feb</strong> <br />0:00 AM 
     </span> 
    </div> 
    <div class="updateCont eventIcon col-md-1 col-sm-1 col-xs-3"> 
     <div class="icon "> 
      <i class="fa fa-update"></i> 
     </div> 
    </div> 
    <div class="updateCont event col-md-9 col-sm-8 col-xs-6"> 
     <span> 
       The buyer has been notified of this update. <br /> 
       <span class="inner department"> 
        124 
       </span> 
     </span> 
    </div> 
</div> 

я сумел извлечь каждый из них с:

sel = Selector(text=response.body) 
updates = sel.xpath("//div[@class='row result']") 

теперь я хотел бы выделить дату и превратить его в datetime, а также строку события updateCont. Купите уведомление об этом обновлении.

Я пробовал:

for update in updates: 
     date = update.xpath('//span').extract() 
     print (len(date)) 

что приводит к 7. Я ожидал, что это будет 3. Более worringly, если я распечатать только датировать он печатает те же данные в три раза. Я ожидал три разных объема данных, поскольку в html есть три отдельных раздела.

ли

sel = Selector(text=response.body) 
updates = sel.xpath("//div[@class='row result']") 

правильный код, чтобы изолировать секции? Какой был бы лучший подход к извлечению пролетов?

ответ

-1
In [19]: for update in updates: 
    ...:   spans = update.xpath('//span') 
    ...:   for span in spans: 
    ...:    text = span.xpath('normalize-space()').extract_first() 
    ...:    print(text) 
    ...:    
    ...:  

из:

Fri. 10 Feb 0:00 AM 
The buyer has been notified of this update. 124 
124 

Используйте ., чтобы изолировать его текущий узел

+0

Спасибо за что он работал. Единственная маленькая проблема теперь 'Fri. 10 февраля
0:00 AM 'будет извлекать только 0:00 AM, а не бит в сильном теге. –

+0

Я все еще не получаю бит в сильном теге. Как только он будет работать полностью, я, конечно, соглашусь с ответом. –