From bbd5e1b90dc87009daef139dc92436270f156014 Mon Sep 17 00:00:00 2001 From: Mozzam Shahid Date: Wed, 15 Jul 2026 21:00:47 +0500 Subject: [PATCH] fix(place): handle European decimal comma in review counts --- src/gmaps_scraper/place_scraper.py | 14 +++++++++++++- tests/test_place_scraper.py | 5 +++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/gmaps_scraper/place_scraper.py b/src/gmaps_scraper/place_scraper.py index 393b474..85ec1f3 100644 --- a/src/gmaps_scraper/place_scraper.py +++ b/src/gmaps_scraper/place_scraper.py @@ -4142,8 +4142,20 @@ def _parse_review_count(value: object) -> int | None: suffix = match.group(2).upper() if not suffix and re.fullmatch(r"\d{1,3}(?:[.,\s]\d{3})+", number_text): return int(re.sub(r"[.,\s]", "", number_text)) + cleaned = number_text.replace(" ", "") + if suffix and cleaned.count(",") == 1: + before, after = cleaned.split(",") + # A single comma with 1-2 trailing digits is a European decimal + # separator (e.g. "1,2K"); otherwise it is a grouping separator + # (e.g. "1,234K"). + if 1 <= len(after) <= 2: + cleaned = before + "." + after + else: + cleaned = before + after + else: + cleaned = cleaned.replace(",", "") try: - number = float(number_text.replace(",", "").replace(" ", "")) + number = float(cleaned) except ValueError: return None multiplier = 1 diff --git a/tests/test_place_scraper.py b/tests/test_place_scraper.py index c34274a..5bfde79 100644 --- a/tests/test_place_scraper.py +++ b/tests/test_place_scraper.py @@ -914,7 +914,12 @@ def test_parse_review_count_handles_suffixes(self) -> None: self.assertEqual(_parse_review_count("1,296"), 1296) self.assertEqual(_parse_review_count("1.296"), 1296) self.assertEqual(_parse_review_count("3.6K"), 3600) + self.assertEqual(_parse_review_count("1.2K"), 1200) + self.assertEqual(_parse_review_count("1,2K"), 1200) + self.assertEqual(_parse_review_count("1,234"), 1234) + self.assertEqual(_parse_review_count("1,234K"), 1234000) self.assertEqual(_parse_review_count("9.4万"), 94000) + self.assertEqual(_parse_review_count("1,2万"), 12000) def test_extract_review_count_from_lines_prefers_place_panel_over_related_cards( self,