代码之家  ›  专栏  ›  技术社区  ›  gongarek

请求相同的解析方法

  •  0
  • gongarek  · 技术社区  · 6 年前

    我不明白请求是如何工作的。我不知道为什么 scrapy.Request(next_page, callback=self.parse2) 不像我想的那样管用。Pitem是对这个请求的回应,但我 KeyError: 'pitem' 我不知道为什么第一个 request 有效,但是 request2

    我的代码:

    蜘蛛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 回复  |  直到 6 年前
        1
  •  1
  •   Casper    6 年前
      request = scrapy.Request(link, callback=self.parse2)
      request.meta['item'] = item
      yield request
    

    这确实定义了一个名为 item 但不是和 pitem .所以当你调用函数 parse2 然后说 pitem = response.meta['pitem'] 它找不到 皮特姆 在请求元数据中。

    一个可能的解决方案可能是使用 pitem = response.meta.get('pitem') 这将返回一个 None 如果找不到,则返回值 皮特姆 但这在很大程度上取决于你的用例。