From 6038a936ec8fa1a4eaf96eaea0eec8cd1c02fd3e Mon Sep 17 00:00:00 2001 From: Silas Brito Date: Wed, 26 Aug 2026 17:55:21 -0300 Subject: [PATCH] fix: extracao individual de nota de avaliacao (rating) e total de avaliacoes por estabelecimento --- backend/app/services/scraper_service.py | 79 ++++++++++++++++++------- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/backend/app/services/scraper_service.py b/backend/app/services/scraper_service.py index d847d32..0b65b51 100644 --- a/backend/app/services/scraper_service.py +++ b/backend/app/services/scraper_service.py @@ -12,6 +12,61 @@ logger = logging.getLogger(__name__) class ScraperService: + @staticmethod + def _extract_rating_and_reviews(detail_panel, text_fallback: str = "") -> tuple: + """ + Extrai a nota de avaliação (ex: 4.8) e o total de avaliações (ex: 150) + específicos de cada estabelecimento no Google Maps. + """ + rating = 0.0 + total_avaliacoes = 0 + + if detail_panel: + # 1. Procurar elemento específico de nota (ex: ou ) + star_elem = detail_panel.query_selector("[aria-label*='estrela'], [aria-label*='star'], span.ceYyJf, div.F7L8d") + if star_elem: + aria_txt = star_elem.get_attribute("aria-label") or star_elem.inner_text() + m = re.search(r'([1-5][.,]\d)', aria_txt) + if m: + try: + rating = float(m.group(1).replace(',', '.')) + except ValueError: + pass + + # 2. Procurar elemento específico de total de avaliações (ex: