有没有办法让scrapy字段以不同的名称序列化?例如,字段' product_name'将成为产品名称'。
class PropertyItem(Item):
product_name = Field()
然后
l.add_xpath('product_name','//[@id="some_id"]/text()')
将被序列化为" product_name':"某些价值",而我希望它是'其他名称':"某些价值" 34;
谢谢
答案 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