def parse(self, response): "Parsear por itens de uma pagina" categoria = response.css("h1").xpath("text()").extract() # validade = "" # Guanabara parece nao disponibilizar a validade das ofertas, apenas pro encarte for sel in response.css("div.produto"): titulo = sel.css("div.box-produtos-nome").xpath("text()") preco = sel.css("div.box-produtos-preco").xpath( "text()|span").xpath("text()") # if len( preco ) == 0 or len( titulo ) == 0: # continue oferta = Oferta() oferta['mercado'] = 'Diamante' oferta['timestamp'] = str(datetime.date.today()) oferta['titulo'] = titulo.extract()[0] oferta['preco'] = preco.extract() oferta['categoria'] = categoria oferta['validade'] = "" yield oferta # ESTA PARTE CO CODIGO E RESPONSAVEL POR PASSAR PARA A PROXIMA PAGINA DA MESMA CATEGORIA # SETINHA PARA A DIREITA next_page = response.css( "div.box > li:nth-child(5) > a:nth-child(1)::attr('href')") if next_page: url = response.urljoin(next_page[0].extract()) yield scrapy.Request(url, self.parse)
def parse(self, response): "Parsear ofertas internas" for href in response.css( "ul.lista-categorias > span > li > a::attr('href')"): url = response.urljoin(href.extract()) yield scrapy.Request(url, callback=self.parse_products) "Parsear ofertas iniciais" validade = response.css("span#texto_validade_oferta").re( '\d{1,2}\/\d{1,2}\/\d{4}') for sel in response.css("ul.lista-ofertas > li"): titulo = filter( bool, map(unicode.strip, sel.css(".descricao-oferta").xpath("text()").extract())) if not titulo: continue preco_frente = sel.css(".preco-oferta > .preco-frente").xpath( "text()").extract() preco_cents = sel.css(".preco-oferta > .preco-centavos").xpath( "text()").extract() oferta = Oferta() oferta['timestamp'] = str(datetime.date.today()) oferta['titulo'] = titulo[0] oferta['mercado'] = 'Mundial' oferta['preco'] = preco_frente[0] + preco_cents[0] # TODO - Criar uma forma de categorizar essas ofertas oferta['categoria'] = "" oferta['quantidade'] = self.match_quantidade(sel) oferta['validade'] = validade[0] yield oferta
def parse_tabs(self, response): "Parsear ofertas por categoria" categoria = response.css("div#breadcrumb a").xpath("text()").extract() validade = "" for sel in response.css("tbody tr"): titulo = sel.css("a span").xpath("text()").extract() preco = sel.css("strong").xpath("text()").extract() oferta = Oferta() oferta['mercado'] = 'Extra' oferta['timestamp'] = str(datetime.date.today()) oferta['titulo'] = titulo oferta['preco'] = preco oferta['mercado'] = 'Extra' oferta['categoria'] = categoria if preco: yield oferta # ESTA PARTE CO CODIGO E RESPONSAVEL POR PASSAR PARA A PROXIMA PAGINA DA MESMA CATEGORIA # SETINHA PARA A DIREITA next_page = response.css("li.next a::attr('href')") if next_page: url = response.urljoin(next_page[0].extract()) yield scrapy.Request(url, self.parse_tabs)
def parse_tabs(self, response): "Parsear ofertas por pages" categoria = response.css("div.paginatorContainer > header > h2").xpath( "text()").extract() validade = "" # Guanabara parece nao disponibilizar a validade das ofertas, apenas pro encarte for sel in response.css(".boxProduct"): titulo = sel.css("a.link").xpath("@title") if categoria == [u'Ofertas', u'Ofertas']: preco = sel.css("p.showcase-item__price--promo ").css( "span.value").xpath("text()") else: preco = sel.css("p.showcase-item__price ").css( "span.value").xpath("text()") oferta = Oferta() oferta['timestamp'] = str(datetime.date.today()) oferta['titulo'] = titulo.extract() oferta['preco'] = preco.extract() oferta['mercado'] = 'Pao de Acucar' oferta['categoria'] = categoria[0] yield oferta next_page = response.css("a.icon--angle-right::attr('href')") if next_page: url = response.urljoin(next_page[0].extract()) yield scrapy.Request(url, self.parse_tabs)
def parse_categories(self, response): "Parsear ofertas por categoria" categoria = response.css("div.title > h3").xpath("text()").extract() validade = "" # Guanabara parece nao disponibilizar a validade das ofertas, apenas pro encarte for sel in response.css(".item"): titulo = sel.css("div.name").xpath("text()") preco = sel.css("span.number").xpath("text()") if len(preco) == 0 or len(titulo) == 0: continue oferta = Oferta() oferta['mercado'] = 'Guanabara' oferta['timestamp'] = str(datetime.date.today()) oferta['titulo'] = titulo.extract()[0] oferta['preco'] = preco.extract()[0] oferta['categoria'] = categoria[0] oferta['validade'] = validade yield oferta
def parse(self,response): "Parsear ofertas por pagina" categoria = response.css("div.nome > h2").xpath("text()").extract() validade = "" # Guanabara parece nao disponibilizar a validade das ofertas, apenas pro encarte for sel in response.css("div.produtos ul li div.bloco_informacoes"): preco = sel.css("p.preco").xpath("text()").extract() titulo = sel.css("div.prod_info a").xpath("text()").extract() oferta = Oferta() oferta['timestamp'] = str( datetime.date.today() ) oferta['titulo'] = titulo.extract()[0] oferta['mercado'] = 'Zona Sul' oferta['preco'] = preco.extract()[0] oferta['categoria'] = categoria[0] oferta['validade'] = validade yield oferta
def parse_products(self, response): "Parsear ofertas por categoria" categoria = response.css("div.content-area > h3").xpath( "text()").extract() validade = response.css("span#validade_encarte").re( '\d{1,2}\/\d{1,2}\/\d{4}') for sel in response.css("ul#lista_ofertas-interna > li"): oferta = Oferta() oferta['timestamp'] = str(datetime.date.today()) oferta['titulo'] = sel.css(".titulo-oferta-interna").xpath( "text()").extract()[0] oferta['preco'] = sel.css(".valor-oferta-interna").xpath( "text()").extract()[0] oferta['categoria'] = categoria[0] oferta['mercado'] = 'Mundial' oferta['quantidade'] = self.match_quantidade(sel) oferta['validade'] = validade[0] yield oferta
def parse_shop(self, response): "Parsear ofertas por loja" validade = response.css("div.local-oferta").css("p").css("i").xpath( "text()") loja = response.css("div.local-oferta").css("p").css("strong").xpath( "text()") for sel in response.css(".detalhe"): titulo = sel.css("p").xpath("text()") preco = sel.css("div.valor").css("span").xpath("text()").extract() preco_cents = sel.css("div.valor").css("sup").xpath( "text()").extract() oferta = Oferta() oferta['timestamp'] = str(datetime.date.today()) oferta['mercado'] = 'Hortifruti' oferta['titulo'] = titulo.extract()[0] oferta['preco'] = preco[0] + preco_cents[0] oferta['categoria'] = "" oferta['validade'] = validade.extract() oferta['loja'] = loja.extract() yield oferta