2013-07-25 11 views
8

Orada bir çok ilişkili konu olduğunu biliyorum, ve bana çok yardımcı oldular, ancak hala yolumu alamıyorum. Kodun çalıştırılmasının hatalarla sonuçlanmadığı noktadayım, ancak csv dosyamda hiçbir şey anlamadım. Sonra, bir web sayfasında başlayan bir köprüyü takip ve bağlantılı sayfayı sıyırıp aşağıdaki Scrapy örümcek var: Ben bir csv dosyasına sonuçları ihraç etmeye çalışıyorumAşağıdaki köprü ve "Filtrelenmiş site dışı istek"

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) 

ama dosya şey olsun. Bununla birlikte, kodu çalıştırmak herhangi bir hataya neden olmaz. Bunun sadece bir URL ile basitleştirilmiş bir örnek olduğunu biliyorum, ancak sorunumu gösteriyor.

Scrapy ürününe Parse2 yönteminde veri kaydetmek istediğimi bildirmem sorunum olabilir.

BTW, Sen değiştirmeniz gereken scrapy crawl spiderBBR -o scraped_data.csv -t csv

+0

'parse2' aranıyor mu - Eğer yapıp yapmadığını nereden göremiyorum. Bir csv dosyasına yazmayı deneyen bir şey de yok gibi görünüyor. –

+0

@SteveAllison: Ups, bu bir yazım hatası. 'Parse' isteğinde 'parse2' olarak geri arama olarak çağırmam için değiştirdim, ancak hala çalışmıyor. – Mace

cevap

22

olarak örümcek çalıştırmak sizin kendi geri arama parse2 kullanmak parse yılında Request vermiştir.

DÜZENLEME: örümcek hala allowed_domains boş

+0

Örneği düzelttim (bu sadece bir yazım hatasıydı - gerçek örümcekimde vardı) ve hala bana boş bir csv dosyası veriyor. – Mace

+0

Bu yüzden örümceklerinizi test ediyorum ve ilan edilmeyen bir global 'siteler 'değişkeni nedeniyle başlamıyor. – Talvalin

+0

Üzgünüz, birkaç yazım hatası vardı. Şimdi çalışmalı - denedim - 'allow_domains = ["boliga.dk"] ile bile - ve hala "csv" dosyasında (veya herhangi bir hatada) hiçbir veri alamıyorum. Xpath'larımın doğru olduğuna inanıyorum, çünkü xPath denetleyicisinde kontrol ettim. – Mace

1

deneyin bu dont_filter=true

yapmak bırakmak yerine doğru çalışıyorsa

allowed_domains = ["boliga.dk"] 

o deneyin ve görün: allowed_domains http önek örneğin içermemelidir yield Request(url=url2, meta{'address':hxs.select("id('searchresult')/tr/td[1]/a[@href]/text()").extract()}, callback=self.parse2,dont_filter=True)