目前在ItemLoaders中存在一个错误,get_output_value()
并且get_collected_values()
忽略item
参数并仅查看ItemLoader._values
因此这些方法中存在一些不一致的行为,因为load_item()
未返回加载的数据 via:
>>> from scrapy.contrib.loader import ItemLoader
>>> il = ItemLoader(response=response, item=dict(foo=1))
>>> il.add_value('bar', 3)
>>> il._values
defaultdict(<type 'list'>, {'bar': [3]})
>>> il.item
{'foo': 1}
>>> il.get_output_value('foo')
[]
>>> il.get_output_value('bar')
[3]
>>> il.get_collected_values('foo')
[]
>>> il.get_collected_values('bar')
[3]
您可以安装建议的补丁或不使用get_collected_values
. 如果你安装了补丁,你可以使用values
这个补丁的参数,我们会体验到一个更理智的结果:
>>> from scrapy.contrib.loader import ItemLoader
>>> il = ItemLoader(response=response, item={}, values=dict(foo=1))
>>> il.add_value('bar', 3)
>>> il._values
defaultdict(<type 'list'>, {'foo': [1], 'bar': [3]})
>>> il.item
{}
>>> il.get_output_value('foo')
[1]
>>> il.get_output_value('bar')
[3]
>>> il.get_collected_values('foo')
[1]
>>> il.get_collected_values('bar')
[3]