2015-08-08 31 views
1

我有类似的问题,下面的个人有。我试图使用元属性传递一个项目。我看到输出的项目数量正确,但它们是单个项目的重复项目。有人可以帮忙吗?我在对前一个人的帖子的回复中猜测,这应该是一个明显的解决办法。Scrapy没有通过元属性传递正确的项目

https://github.com/scrapy/scrapy/issues/1257

def parse(self, response): 
# some treatment 
# a loop 
    request = scrapy.Request(url=<calculated_url>, callback=parseChapter) 
    request.meta['item'] = # a dictionary containing some data of the just parsed page 
    yield request 

def parseChapter(self, response): 
# some treatment 
# a loop 
    request = scrapy.Request(url=<calculated_url>, callback=parseCategory) 
    request.meta['item'] = # a dictionary containing some data of the just parsed page 
    # print request.meta['item'] is good and different in every iteration 
    yield request 

def parseCategory(self, response): 
# print response.meta['item'] is not good because it displays the same value many times 
# for every new call of parseChapter, meta['item'] received is always the same 
# some treatment 
+0

请编辑您的问题,并添加完整的代码和错误消息。否则,猜测是什么导致了你的问题是一个纯粹的问题。 –

+0

正确的答案是改变request.meta ['item'] = item to request.meta ['item'] = item.copy()(除非有人更有见识地不同意) –

回答

2

最有可能的,你修改了该项目的每个迭代的for循环,而不是创建一个新的。

因此,所有请求都以相同的值发送。即项目变量的最后值。

def parseChapter(self, response): 
# some treatment 
# a loop 
    request = scrapy.Request(url=<calculated_url>, callback=parseCategory) 
    request.meta['item'] = my_item_dict.copy() 
    # print request.meta['item'] is good and different in every iteration 
    yield request 
+0

这应该工作: 'for循环: item = PlaceItem()...其他代码...' – Andres

+0

将有助于描述确切的解决方案,如果你发布完整的parseChapter –

相关问题