Парсю проект с большой вложенностью до карточки товара и столкнулся с проблемой древовидного прохождения по страницам.
до карточки товара может вести неопределенное количество страниц.
- ссылка на страницу(подкатегория) 1 находится в классе papaSupermarket-subcategories-grid-item,
- ссылка на страницу(подкатегория/подкатегория) 2 находится в классе papaSupermarket-subcategories-grid-item,
- ссылка на страницу(подкатегория/подкатегория/подкатегория) 3 находится в классе papaSupermarket-subcategories-grid-item,
и т.д.
Например на третьей странице уже можно вытащить ссылку на карточку товара, это я сделал, все работает корректно.
Как нужно переписать эту функцию прохода по страницам, с неопределенной вложенностью?
Если на странице есть контейнер с классом papaSupermarket-subcategories-grid-item брать оттуда ссылку на следующую страницу, далее переходить на нее проверять есть ли контейнер с классом papaSupermarket-subcategories-grid-item и если есть то дальше на страницу, если нет - то уже выполнять парсинг.
Есть код:
def parse_grid_items(self, response):
urls_grid_items = response.css('li.papaSupermarket-subcategories-grid-item > a::attr(href)').extract()
while urls_grid_items:
for url_items in urls_grid_items:
url_items = response.urljoin(url_items)
# передаем ссылку в функцию def parse
yield scrapy.Request(url=url_items, callback=self.parse)