2015-01-03 18 views
12

Sono nuovo di scrapy e sto cercando di raschiare la pagina web del sito Ikea. La pagina di base con l'elenco delle posizioni dato here.Scrapy: Estrai link e testo

mio items.py del file è il seguente:

import scrapy 


class IkeaItem(scrapy.Item): 

    name = scrapy.Field() 
    link = scrapy.Field() 

E il ragno è il seguente:

import scrapy 
from ikea.items import IkeaItem 
class IkeaSpider(scrapy.Spider): 
    name = 'ikea' 

    allowed_domains = ['http://www.ikea.com/'] 

    start_urls = ['http://www.ikea.com/'] 

    def parse(self, response): 
     for sel in response.xpath('//tr/td/a'): 
      item = IkeaItem() 
      item['name'] = sel.xpath('a/text()').extract() 
      item['link'] = sel.xpath('a/@href').extract() 

      yield item 

Sulla eseguendo il file Non ricevo alcun output. L'output del file JSON è qualcosa di simile:

[[{"link": [], "name": []} 

L'output che sto cercando è il nome della località e il collegamento. Non sto ottenendo nulla. Dove sto andando male?

+1

hai provato "ikea.com" come allowed_domains? – aberna

+0

@aberna che differenza farà? Ci proverò APPENA POSSIBILE e nessuna differenza. Nessuna uscita –

+0

Seguirà l'esempio di scrapy come nella documentazione (http://doc.scrapy.org/en/latest/topics/spiders.html) – aberna

risposta

9

C'è un errore semplice nelle espressioni xpath per i campi oggetto. Il ciclo sta già superando i tag a, non è necessario specificare a nelle espressioni xpath interne. In altre parole, attualmente stai cercando i tag a all'interno dei tag a all'interno dello td all'interno dello tr. Che ovviamente si traduce in nulla.

Sostituire a/text() con text() e a/@href con @href.

(testati - lavori per me)

+0

Potresti spiegare perché questo funziona e cosa sto provando, no? Fondamentalmente voglio sapere come e dove stavo sbagliando. Grazie per la risposta. Funziona. :) –

+0

@PrakharMohanSrivastava ha aggiornato la risposta. Scusa, non sono molto bravo a spiegare le cose :) – alecxe

+0

Grazie. Capito. Molte grazie. –

1

uso questo ....

item['name'] = sel.xpath('//a/text()').extract() 
    item['link'] = sel.xpath('//a/@href').extract() 
+2

utilizzare questo e provare questo tendono ad essere le cose povere da dire in una spiegazione – Drew

+1

grazie drew, penso che questa gentile spiegazione ti accompagni. – Ganesh

+2

non so cosa significhi. Cercando di aiutarti a guadagnare punti con buone risposte. – Drew