В моем классе пауков Scrapy у меня есть несколько функций для анализа различных типов URL. Наступает момент, когда, если поиск по регулярному выражению не найден, он вызывает функцию parse_product () напрямую с текущим ответом в качестве параметра и возвращает данные из этой функции, в противном случае он должен отправить запрос формы с parse_product () в качестве обратный вызов.
Проблема в том, что в первом случае данные не поступают на выход.
В документации Scrapy говорится, что мне нужно вернуть словарь в функции обратного вызова, чтобы он выполнялся в выходном конвейере, но в выводе присутствуют только элементы, возвращенные из запроса формы, сделанного в операторе else.
def parse_variation(self, response):
self.logger.info("Parsing Variation")
url_search = re.findall(variation_request_url_pattern, str(response.body))
if not url_search:
self.logger.info("URL SEARCH IS EMPTY")
data = self.parse_product(response)
#No Output with this statement
return data
else:
for url in url_search:
yield FormRequest(url=url, body=body callback=self.parse_product)
def parse_product(self, response):
self.logger.info("Parsing Product")
data = {}
data["url"] = response.url
data["name"] = response.xpath(title_xpath).extract_first()
return data
Приходит только результат запроса в операторе else. Почему это так?