我需要字典中的值。但 item 在其之上使用了一些抽象。如何从项目中获取字典中的字段?
我知道scrapy现在允许返回dict来代替item。但我已经在我的代码中使用了 item,那么如何转换它。
在我看来像:
class Product(scrapy.Item):
name = scrapy.Field()
i = Product(name='foo)
print dict(i)
给你一本字典 {'name': 'foo'}
vars(p)
p.__dict__
让你: {'_values': {'name': 'foo'}}
如果您不想创建新字典,只需从上面获取 _values 键:
vars(p)['_values']
p.__dict__['_values']
接受的答案效果很好,但当您有嵌套项目时它就不起作用。在这种情况下,您可能需要首先将项目转换为字符串,然后转换为 json,如下所示:
class CustomEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, scrapy.Item):
return dict(o)