#python #scrapy
#python #scrapy
Вопрос:
Что я делаю:
def parse(self, response):
products_urls = response.css('.product-item a::attr(href)').extract()
for product_url in product_urls:
yield Request(product_url, callback=self.parse_product)
print( "Continue doing stuff...." )
def parse_product(self, response):
title = response.css('h1::text').extract_first()
print( title )
}
В этом примере сначала будет выведен код, Continue doing stuff..
а затем будут напечатаны названия продуктов. Я бы хотел, чтобы она выполнялась иначе, сначала выполняйте запросы и печатайте заголовки, и только потом печатайте Continue doing stuff..
ОБНОВЛЕНИЕ: @Georgiy в комментариях спросил, нужны ли мне ранее очищенные данные о продукте.
Ответ — да, это упрощенный пример. После получения данных я хочу манипулировать этими данными.
Комментарии:
1. Это зависит от … что именно «Продолжать делать вещи ….» ожидается, что ваше приложение будет делать?. Требуется ли для этого ранее очищенные данные продукта?
2. @Georgiy Я обновил свой вопрос ответом на ваш комментарий.
Ответ №1:
Вы можете переместить логику в parse_product
функцию. Например:
def parse(self, response):
products_urls = response.css('.product-item a::attr(href)').extract()
self.count = len(products_urls)
if self.count == 0:
self.onEnd()
else:
for product_url in product_urls:
yield Request(product_url, callback=self.parse_product)
def onEnd(self):
print( "Continue doing stuff...." )
def parse_product(self, response):
title = response.css('h1::text').extract_first()
print( title )
self.count -= 1
if (self.count == 0):
self.onEnd()