2016-04-04 19 views
1

nesneyi dolmuyor İşte benim kodscrapy istek

spider.py

def parse(self,response): 
    item=someItem() 
    cuv=Vitae() 
    item['cuv']=cuv 
    request=scrapy.Request(url, callback=self.cvsearch) 
    request.meta['item'] = item 
    yield request 

def cvsearch(self, response): 
    item=response.meta['item'] 
    cv=item['cuv'] 
    cv['link']=response.url 
    return item 

items.py

class someItem(Item): 
    cuv=Field() 

class Vitae(Item): 
    link=Field() 

Herhangi bir hata görüntülenir olduğunu!

"cuv" nesnesini "item" olarak ekler, ancak "cuv" ile ilgili öznitelikler hiçbir zaman eklenmez, burada ne eksik?

cevap

0

ait yield kullanmalıdır ama yanlış en iyisi ne anlatmaya çalışacağım ben

scrapy asenkron anlam isteklerdir düzen yoktur olmasıdır can idam. en cvsearch Kontrol edemediğiniz hangi yapılır önce bu hat çalıştırır çünkü [1] -bu

def parse(self,response): 
    item=someItem() 
    cuv={} 
    item['cuv']=cuv 
    request=scrapy.Request(url, callback=self.cvsearch) 
    request.meta['item'] = item 
    yield request 
    logging.error(item['cuv']) #this will return null [1] 

def cvsearch(self, response): 
    item=response.meta['item'] 
    cv=item['cuv'] 
    cv['link']=response.url 
    return item 

olan kod parçası bir göz atalım. Bunu çözmek için tam ben çoklu kullanım bakmak tavsiye bu gerçeği kavramak için birden fazla istekle

def parse(self,response): 
    item=someItem() 
    request=scrapy.Request(url, callback=self.cvsearch) 
    request.meta['item'] = item 
    yield request 

def cvsearch(self, response): 
    item=response.meta['item'] 
    request=scrapy.Request(url, callback=self.another) 
    yield request 

def another (self, response) 
    item=response.meta['item'] 
    yield item 

için bir çağlayan yapmak zorundayız. Lütfen özlediğim bir şey ekle!

1

Neden scrapy.Item'i başka bir içeride kullanıyorsunuz? item['cuv']'unuzda basit bir python dict kullanmayı deneyin. Ve request.meta'u scrapy.Request yapıcı argümanına taşımayı deneyin. Ve ben çok iyi explainer değilim yerine return

def parse(self,response): 
    item=someItem() 
    request=scrapy.Request(url, meta={'item': item} callback=self.cvsearch) 
    yield request 

def cvsearch(self, response): 
    item=response.meta['item'] 
    item['cuv'] = {'link':response.url} 
    yield item 
+0

ama ayrıştırma yöntemindeki öğede çalışmaya devam etmek istiyorum, bunu yapmak iyi mi? Yine de çalışmıyor, boş çıkıyor –

+0

Cevabı düzelttim, bir kez daha kontrol edin. –

+0

Hala çalışmıyor, dediğin gibi dict yaptım ve cvsearch yönteminde 'logging.error (item)' 'yi yaptığım zaman tamam ama ne zaman" verim isteği "sonra ayrıştırma yönteminde aynısını yaptığımda yok artık –