запрос к тому же методу разбора - PullRequest
0 голосов
/ 22 мая 2018

Я не понимаю, как работает запрос.Я не знаю, почему 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 голосов
/ 22 мая 2018
  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, но это очень сильно зависит от вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...