0

我通过元属性将scrapy项目传递给回调函数,如下所示:

def parse_VendorDetails(self, response):
    loader = XPathItemLoader(response.meta['item'], response=response)

    print loader.get_collected_values('testField') <-- returns empty value
    print response.meta['item']['testField'] <-- return expected value

第一个打印输出一个空列表。第二次打印按预期返回值。这可能是什么原因?

4

1 回答 1

1

目前在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]
于 2013-03-17T22:42:00.247 回答