2015-01-03 8 views
12

Ich bin neu zu scrapy und ich versuche, die Ikea Webseite zu kratzen. Die Basisseite mit der Liste der angegebenen Standorte here.Scrapy: Extrahieren Sie Links und Text

import scrapy 


class IkeaItem(scrapy.Item): 

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

Und die Spinne ist unten angegeben:

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 

Auf Ausführen der Datei, die ich bekommen habe keine Ausgabe

Meine items.py Datei ist unten angegeben. Die JSON-Datei ausgegeben wird, so etwas wie:

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

Die Ausgabe, die ich suche, der Name der Lage ist und der Link. Ich bekomme nichts. Wohin gehe ich falsch?

+1

haben Sie versucht, "ikea.com" als allowed_domains? – aberna

+0

@aberna Welchen Unterschied macht das? Ich werde das so schnell wie möglich versuchen und keinen Unterschied. Keine Leistung. –

+0

Es würde dem scrapy Beispiel folgen, wie in der Dokumentation (http://doc.scrapy.org/en/latest/topics/spiders.html) – aberna

Antwort

9

Es gibt einen einfachen Fehler innerhalb der Xpath-Ausdrücke für die Artikelfelder. Die Schleife geht bereits über die a Tags, Sie müssen a in den inneren XPath-Ausdrücken nicht angeben. Mit anderen Worten suchen Sie derzeit nach a Tags innerhalb der a Tags innerhalb der td innerhalb tr. Was offensichtlich zu nichts führt.

Ersetzen Sie a/text() mit text() und a/@href mit @href.

(getestet - Werke für mich)

+0

Könnten Sie bitte erklären, warum das funktioniert und was ich versuche, nicht? Grundsätzlich möchte ich wissen, wie und wo ich falsch liege. Danke für die Antwort. Es klappt. :) –

+0

@PrakharMohanSrivastava aktualisiert die Antwort. Entschuldigung, ich bin nicht wirklich gut darin Dinge zu erklären :) – alecxe

+0

Danke. Ich hab es geschafft. Danke vielmals. –

1

Verwendung dieses ....

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

Verwenden Sie dies und versuchen Sie dies sind in der Regel schlechte Dinge zu sagen in einer Erklärung – Drew

+1

Dank gezeichnet, ich denke, diese Art Erklärung geht Sie. – Ganesh

+2

nicht sicher, was das bedeutet. Versuchen Sie, mit guten Antworten Punkte zu sammeln. – Drew