2017-01-06 93 views
0

我試圖從管道獲取返回值。我正在使用產量生成器來生成項目。Scrapy從管道獲取返回值

這是我的代碼。

def get_or_create(model): 
    model_class = type(model) 
    created = False 

    try: 
     obj = model_class.objects.get(product_company=model.product_company, barcode=model.barcode) 
    except model_class.DoesNotExist: 
     created = True 
     obj = model # DjangoItem created a model for us. 
     obj.save() 
    return (obj, created) 


def update_model(destination, source, commit=True): 
    pk = destination.pk 
    source_dict = model_to_dict(source) 
    for (key, value) in source_dict.items(): 
     setattr(destination, key, value) 
    setattr(destination, 'pk', pk) 
    if commit: 
     destination.save() 
    return destination 
class ProductItemPipeline(object): 
    def process_item(self, item, spider): 

     if isinstance(item, ProductItem): 
      item_model = item.instance 
      model, created = get_or_create(item_model) 
      item['cover_photo'] = item['files'][0]['path'] 
      if created: 
       item.save() 
       for image in item['files']: 
        imageItem = ProductImageItem(image=image['path'], product=model) 
        imageItem.save() 
       for comment in item['comments']: 
        commentItem = CommentItem(comment=comment.comment, product=model) 
        commentItem.save() 
      return model 

另外這是我的蜘蛛。

item = ProductItem(name=name, price=price, barcode=barcode, file_urls=objectImages, product_url=response.url,product_company=company, comments = comments) 
     product = yield item 
     print type(product) 
     print "yield product" 

和產品類型將返回nonetype

回答

0

你不明白蟒蛇yield。您應該使用yield,如return返回一些函數結果。你可以找到關於發電機更多信息這article

所以,你的代碼看起來像

item = ProductItem(name=name, price=price, barcode=barcode, file_urls=objectImages, product_url=response.url,product_company=company, comments = comments) 
self.logger.debug(type(product)) 
self.logger.debug('yield product') 
yield item