我不了解请求的工作原理。我不知道为什么scrapy.Request(next_page, callback=self.parse2)
没有像我想的那样工作。 Pitem是对此请求的回复,但我有KeyError: 'pitem'
我不知道为什么第一个request
有效,但request2
没有
我的代码:
spider.py
...
def parse(self, response):
...
request = scrapy.Request(link, callback=self.parse2)
request.meta['item'] = item
yield request
...
def parse2(self, response)
item = response.meta['item']
pitem = response.meta['pitem']
...
pitem['field'].append(self.whatever)
if next_page is not None:
request2 = scrapy.Request(next_page, callback=self.parse2)
request2.meta['pitem'] = item
yield request2
else:
yield pitem
self.whatever = []
答案 0 :(得分:1)
request = scrapy.Request(link, callback=self.parse2)
request.meta['item'] = item
yield request
这确实定义了一个名为item
但不包含pitem
的元变量。因此,当您调用函数parse2
并说pitem = response.meta['pitem']
时,它无法在请求元数据中找到pitem
。
一种可能的解决方案可能是使用pitem = response.meta.get('pitem')
,如果它无法找到None
,则会返回pitem
值,但这很大程度上取决于您的用例。