按不同名称序列化项目字段

时间:2016-11-13 13:29:47

标签: scrapy

有没有办法让scrapy字段以不同的名称序列化?例如,字段' product_name'将成为产品名称'。

    class PropertyItem(Item):
        product_name = Field()

然后

    l.add_xpath('product_name','//[@id="some_id"]/text()')

将被序列化为" product_name':"某些价值",而我希望它是'其他名称':"某些价值" 34;

谢谢

2 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解您,但您始终可以使用item pipelines来修改和更改蜘蛛返回的项目。

例如,您可以执行以下操作:

class FooPipeline(object):
    def process_item(self, item, spider):
        new_value = item['product_name'] + ' new name'
        del item['product_name']
        item['some other name'] = new_value
        return item

默认情况下,scrapy.Item字段是静态的,只能设置定义的字段。您可以通过覆盖__setitem__()魔术方法来避免这种情况:

class TestItem(scrapy.Item):
    name = scrapy.Field()

    def __setitem__(self, key, value):
        self._values[key] = value

结果:

t = TestItem()
t['name2'] = 'one'
print(t)
>>> {'name2': 'one'}
# even though name2 is not defined

答案 1 :(得分:0)

如果您在(?s)(WORD_A).*?[\s\S]方法或__init__课程中定义其他字段,则您在选择名称方面的限制较少:

Item