请求相同的解析方法

时间:2018-05-22 11:57:27

标签: python web-scraping scrapy

我不了解请求的工作原理。我不知道为什么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 = []

1 个答案:

答案 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值,但这很大程度上取决于您的用例。