import scrapy from fleurop.items import FlowerItem class FlowerSpider(scrapy.Spider): name = "flowerspider" allowed_domains = ["www.fleurop.de"] start_urls = ["https://www.fleurop.de/alle-blumenstraeusse?p=1"] custom_settings = { 'FEEDS': { 'flowers_%(time)s.csv': { 'format': 'csv', 'overwrite': True}} } def parse(self, response): bouquets = response.css('div[class*="cms-listing-col"]') for bouquet in bouquets: if bouquet.css("div a").attrib["title"]: bouquet_url = bouquet.css("div a").attrib["href"] yield scrapy.Request(bouquet_url, callback=self.parse_bouquet_page) n_pages = response.css("div.has-element-loader.load-more-products").attrib[ "data-total-pages" ] for page in range(int(n_pages), 1, -1): # int(n_pages), 1, -1 next_page_url = f"https://www.fleurop.de/alle-blumenstraeusse?p={page}" yield response.follow(next_page_url, callback=self.parse) def parse_bouquet_page(self, response): flower_item = FlowerItem() flower_item['url'] = response.url flower_item['name'] = response.css('div.product-heading h1::text').get() flower_item['delivery_period'] = response.css('div.deliveryPeriod::text').get() if response.css('div.option-label::text').get(): flower_item['product_options'] = dict(zip( [el.strip() for el in response.css('div.option-label::text').getall()], [el.strip().replace('\xa0€', ' €') for el in response.css('div.option-price::text').getall()] )) else: flower_item['product_options'] = response.css('p.product-detail-price::text').get().strip().replace('\xa0€', ' €') flower_item['product_description'] = response.css('div.card-body.description-content').get() flower_item['content'] = [el.strip() for el in response.css('div.blossom-name::text').getall()] flower_item['colors'] = [el.strip() for el in response.css('div.color-name::text').getall()] flower_item['delivery_info'] = response.css('div.card-body.pdp-delivery-content').get() flower_item['image_urls'] = response.css('div.gallery-slider-thumbnails-item-inner img::attr(src)').getall() if flower_item['image_urls'] == []: flower_item['image_urls'] = response.css('div.gallery-slider-single-image img::attr(src)').get() yield flower_item