0

我正在尝试从管道中获取返回值。我正在使用产量生成器来生成项目。

这是我的代码。

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

4

1 回答 1

0

你不懂蟒蛇yield。您应该使用yieldlikereturn来返回一些函数结果。您可以在本文中找到有关生成器的更多信息

所以你的代码看起来像

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
于 2017-01-07T13:08:20.467 回答