2013-07-25 1 views
8

Ich weiß, dass es mehrere verwandte Threads gibt, und sie haben mir sehr geholfen, aber ich kann immer noch nicht den ganzen Weg. Ich bin an dem Punkt, wo die Ausführung des Codes nicht zu Fehlern führt, aber ich bekomme nichts in meiner csv Datei. Ich habe folgende Scrapy Spinne, die auf einer Webseite startet, folgt dann einen Hyperlink, und schabt die verknüpfte Seite:Folgende Hyperlink und "Gefiltert Offsite-Anfrage"

from scrapy.http import Request 
from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item, Field 

class bbrItem(Item): 
    Year = Field() 
    AppraisalDate = Field() 
    PropertyValue = Field() 
    LandValue = Field() 
    Usage = Field() 
    LandSize = Field() 
    Address = Field()  

class spiderBBRTest(BaseSpider): 
    name = 'spiderBBRTest' 
    allowed_domains = ["http://boliga.dk"] 
    start_urls = ['http://www.boliga.dk/bbr/resultater?sort=hus_nr_sort-a,etage-a,side-a&gade=Septembervej&hus_nr=29&ipostnr=2730'] 

    def parse2(self, response):   
     hxs = HtmlXPathSelector(response) 
     bbrs2 = hxs.select("id('evaluationControl')/div[2]/div") 
     bbrs = iter(bbrs2) 
     next(bbrs) 
     for bbr in bbrs: 
      item = bbrItem() 
      item['Year'] = bbr.select("table/tbody/tr[1]/td[2]/text()").extract() 
      item['AppraisalDate'] = bbr.select("table/tbody/tr[2]/td[2]/text()").extract() 
      item['PropertyValue'] = bbr.select("table/tbody/tr[3]/td[2]/text()").extract() 
      item['LandValue'] = bbr.select("table/tbody/tr[4]/td[2]/text()").extract() 
      item['Usage'] = bbr.select("table/tbody/tr[5]/td[2]/text()").extract() 
      item['LandSize'] = bbr.select("table/tbody/tr[6]/td[2]/text()").extract() 
      item['Address'] = response.meta['address'] 
      yield item 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     PartUrl = ''.join(hxs.select("id('searchresult')/tr/td[1]/a/@href").extract()) 
     url2 = ''.join(["http://www.boliga.dk", PartUrl]) 
     yield Request(url=url2, meta={'address': hxs.select("id('searchresult')/tr/td[1]/a[@href]/text()").extract()}, callback=self.parse2) 

Ich versuche, die Ergebnisse in eine CSV-Datei zu exportieren, aber ich habe nichts die Datei. Das Ausführen des Codes führt jedoch nicht zu Fehlern. Ich weiß, es ist ein einfaches Beispiel mit nur einer URL, aber es zeigt mein Problem.

Ich denke mein Problem könnte sein, dass ich nicht Scrapy erzähle, dass ich die Daten in der Parse2 Methode speichern möchte.

BTW, ich laufe die Spinne als scrapy crawl spiderBBR -o scraped_data.csv -t csv

+0

Wird 'parse2' aufgerufen - ich kann nicht sehen, woher es kommt. Es scheint auch nichts zu geben, das versucht, in eine CSV-Datei zu schreiben. –

+0

@SteveAllison: Ups, das ist ein Tippfehler. Ich habe es so geändert, dass ich 'parse2' als Callback in der Anfrage in' parse' nenne, aber es funktioniert immer noch nicht. – Mace

Antwort

22

Sie benötigen ergab Request in parse ändern parse2 als Callback zu verwenden.

EDIT: allowed_domains sollte nicht den http-Präfix zB umfassen:

allowed_domains = ["boliga.dk"] 

bereiten und sehen, ob Ihre Spinne noch korrekt läuft, anstatt verlassen allowed_domains leer

+0

Ich korrigierte das Beispiel (das war nur ein Tippfehler - ich hatte es in meiner tatsächlichen Spinne), und es gibt mir immer noch eine leere CSV-Datei. – Mace

+0

Also teste ich Ihre Spinne und sie wird nicht starten, weil eine globale 'sites'-Variable nicht deklariert wird. – Talvalin

+0

Entschuldigung, es gab ein paar Tippfehler. Jetzt sollte es funktionieren - ich habe es versucht - sogar mit 'allowed_domains = [" boliga.dk "]' und ich bekomme immer noch keine Daten in der 'csv' Datei (noch irgendwelche Fehler). Ich glaube meine xpaths sind korrekt, da ich sie in xPath Checker überprüft habe. – Mace

1

versuchen, diesen dont_filter=true

machen yield Request(url=url2, meta{'address':hxs.select("id('searchresult')/tr/td[1]/a[@href]/text()").extract()}, callback=self.parse2,dont_filter=True)