Как собирать отзывы из Google: пошаговое руководство

В этом руководстве я покажу, как собирать отзывы из Google Reviews с помощью Python, чтобы легко получать и анализировать данные из карточек компаний в Google Maps. Если вы хотите отслеживать тональность отзывов клиентов, выявлять тренды или просто собирать отзывы в больших объемах, этот простой и масштабируемый метод поможет вам справиться с задачей. Таким образом, у вас будет понятный процесс, чтобы начать собирать и извлекать полезные данные из Google Reviews и развивать бизнес.

Мало времени? Вот 3 лучших провайдера для парсинга Google Reviews без лишних хлопот:

  1. Яркие данные: Лидер рынка с выделенными Google Maps APIs, ротационными прокси и scraping browser, который автоматически обходит антибот-защиту. Лучший выбор для масштабирования и надежности.
  2. Oxylabs: Мощная инфраструктура для скрапинга с API SERP в реальном времени и обширными прокси-сетями. Отлично подходит для сбора данных корпоративного уровня.
  3. ScraperAPI: Простой API, который берет на себя работу с прокси, браузерами и CAPTCHA. Бюджетный вариант для небольших проектов.

👇 Хотите собрать свой собственный scraper? Читайте дальше полный Python-урок.

Что такое веб-скрейпинг?

Веб-скрапинг — это процесс извлечения данных с веб-сайтов. Он подразумевает получение содержимого веб-страницы и выделение из него нужной информации. Когда речь идет о Google Reviews, веб-скрапинг помогает компаниям собирать ценную обратную связь от клиентов о своих продуктах или услугах.

Эти данные можно использовать для анализа мнений клиентов, выявления областей для улучшения и отчетности по показателям бизнеса. С помощью парсинга Google Reviews компании могут получать представление об удовлетворенности клиентов и использовать эти данные, чтобы улучшать общий клиентский опыт и принимать обоснованные решения для роста.

Зачем парсить отзывы Google?

Google Reviews — это настоящий кладезь информации. Они дают компаниям прямую обратную связь от клиентов, которая может быть полезна по нескольким направлениям:

  • Удовлетворенность клиентов: узнайте, что клиентам нравится и что не нравится в вашем бизнесе.
  • Анализ конкурентов: сравнивайте отзывы по конкурентам, чтобы определить области для улучшения.
  • Преимущества для SEO: положительные отзывы могут улучшить позиции вашего сайта в поисковой выдаче.
  • Мониторинг бренда: следите за тем, как публика воспринимает ваш бренд.

Парсинг отзывов Google помогает компаниям получать эти инсайты в масштабе, экономя время и усилия по сравнению с ручным чтением отдельных отзывов.

Инструменты, необходимые для парсинга Google Reviews

Чтобы парсить Google Reviews, вам понадобятся следующие инструменты:

  • Язык программирования: Python — один из самых популярных языков для веб-скрапинга благодаря своей простоте и мощным библиотекам.
  • Библиотеки: в этом руководстве мы будем использовать такие библиотеки, как requestsBeautifulSoup, и Селен для парсинга. BeautifulSoup помогает парсить HTML-контент веб-страницы, а Selenium справляется с сайтами, сильно зависящими от JavaScript, такими как Google Maps.
  • Прокси-сервисы: У Google действуют строгие меры для блокировки скраперов. Чтобы избежать блокировки, вам потребуется использовать прокси-сервисы, такие как Bright Data или Oxylabs, для ротации IP-адресов.
  • Инструменты автоматизации браузера: некоторые страницы требуют взаимодействия, например нажатия кнопок или прокрутки. Selenium может автоматизировать такие действия.

Как парсить отзывы Google Reviews из одной карточки

Первый шаг — собрать отзывы с одной страницы карточки в Google Maps. Google Maps предоставляет большой объём данных, включая отзывы клиентов, оценки по звёздам и сведения об авторе отзыва.

Шаг 1: Настройте Python-окружение

Для начала убедитесь, что в системе установлен Python. Необходимые библиотеки можно установить, выполнив следующие команды:

pip install requests
pip install beautifulsoup4
pip install selenium

Шаг 2: Найдите страницу Google Reviews

URL карточки компании в Google Maps обычно выглядит так:

https://www.google.com/maps/place/{business_name}/@latitude,longitude

Откройте страницу вашей компании в Google Maps и скопируйте URL.

Шаг 3: Используйте Selenium, чтобы открыть карточку в Google Maps

Для отображения отзывов в Google Maps требуется рендеринг JavaScript, поэтому мы будем использовать Selenium, чтобы имитировать действия в браузере. Ниже приведен простой скрипт Selenium, который открывает карточку в Google Maps и нажимает вкладку с отзывами.

с сайта селен импорт webdriver
с сайта selenium.webdriver.common.by импорт По ссылке
с сайта selenium.webdriver.chrome.options импорт Опции
импорт время
# Настройте Selenium WebDriver (Selenium 4 автоматически управляет ChromeDriver)
chrome_options = Options()
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com/maps/place/The Манхэттен в отеле Таймс-сквер")
# Дождитесь загрузки страницы
time.sleep(5)
# Перейдите на вкладку "Отзывы", используя гибкий селектор
reviews_tab = driver.find_element(By.XPATH, "//button[contains(@aria-label, 'Reviews')]")
reviews_tab.click()
# Подождите, пока загрузятся отзывы
time.sleep(3)

Шаг 4: прокрутите страницу, чтобы загрузить все отзывы

Google Maps использует бесконечную прокрутку внутри отдельной панели для загрузки отзывов, а не в основном окне. Чтобы собрать все отзывы, нужно имитировать прокрутку внутри контейнера с отзывами.

# Найдите прокручиваемую панель отзывов
scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde")
# Прокрутите панель, чтобы загрузить все отзывы
для _ в ассортимент(10):  # Настройте диапазон для увеличения прокрутки
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
    time.sleep(2)

Шаг 5: Извлеките данные отзывов

После загрузки отзывов можно использовать BeautifulSoup, чтобы распарсить страницу и извлечь данные об отзывах. Вот пример, как получить текст отзыва, имя автора, рейтинг и дату:

с сайта bs4 импорт BeautifulSoup
# Получение источника страницы после прокрутки
html = driver.page_source
# Разбор страницы с помощью BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
# Найти все контейнеры для отзывов
отзывы = soup.find_all("div", class_="jftiEf")
# Извлечение соответствующих данных из каждого обзора
review_data = []
для обзор в отзывы:
    # Имя рецензента
    name_elem = review.find("div", class_="d4r55")
    имя_рецензента = имя_элемента.text.strip() если имя_элемента else "Без имени"
    
    # Текст отзыва
    text_elem = review.find("span", class_="wiI7pd")
    review_text = text_elem.text.strip() если text_elem else «Нет текста отзыва»
    
    Рейтинг # (подсчет заполненных звезд)
    rating_container = review.find("span", class_="hCCjke")
    если rating_container:
        заполненные_звезды = rating_container.find_all("span", class_="NhBTye")
        рейтинг = len(заполненные_звезды)
    else:
        рейтинг = 0
    
    # Дата отзыва
    date_elem = review.find("span", class_="rsqaWe")
    review_date = date_elem.text.strip() если дата_элемент else "Без даты"
    review_data.append({
        "рецензент": имя_рецензента,
        "review_text": review_text,
        "рейтинг": рейтинг,
        "review_date": дата_обзора
    })
печать(review_data)

Шаг 6: Обработайте кнопку «Ещё» для длинных отзывов

Некоторые отзывы могут быть обрезаны кнопкой «More», которая скрывает часть текста. Нажатие на эту кнопку можно автоматизировать с помощью Selenium:

# Нажмите "Подробнее", чтобы раскрыть полный текст обзора
more_buttons = driver.find_elements(By.CSS_SELECTOR, ".w8nwRe.kyuRq")
для кнопка в more_buttons:
    попробуйте:
        button.click()
        time.sleep(0.5)
    кроме:
        пройти  # Кнопка может быть не кликабельна или не видна

Шаг 7: Сохраните данные

После извлечения данных вы можете сохранить их в CSV, JSON или базе данных. В этом примере мы сохраним данные в JSON-файл.

импорт json
с открыть("reviews.json", "w", кодировка="utf-8") в роли файл:
    json.dump(review_data, file, indent=4, ensure_ascii=Ложь)

Масштабирование процесса парсинга на несколько карточек

Теперь, когда вы научились собирать данные с одной карточки, пора масштабировать процесс на несколько карточек компаний.

Шаг 1: Извлеките несколько URL-адресов

Страницы поиска Google Maps содержат ссылки на отдельные карточки компаний. Чтобы собрать отзывы из нескольких карточек, сначала извлеките URL компаний со страницы поиска.

def извлечение_списков_урлов(search_url):
    driver.get(search_url)
    time.sleep(5)
# Найдите прокручиваемую панель результатов поиска
    попробуйте:
        scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde.ecceSd")
        для _ в ассортимент(5):
            driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
            time.sleep(2)
    кроме Исключение в роли e:
        печать(f"Ошибка прокрутки: {e}")
    # Извлеките URL-адреса объявлений
    listing_elements = driver.find_elements(By.CSS_SELECTOR, "a.hfpxzc")
    urls = [element.get_attribute("href") для элемент в listing_elements]
    возврат урлы
listing_urls = extract_listing_urls("https://www.google.com/maps/search/hotels в Нью-Йорке")
печать(listing_urls)

Шаг 2: Соберите отзывы для каждой карточки

Когда у вас есть URL карточек, можно пройти по каждому адресу и собрать отзывы тем же способом, что и для одной карточки.

all_reviews = []
для url в listing_urls:
    reviews = scrape_reviews(url)
    all_reviews.append({
        "url": url,
        "отзывы": отзывы
    })
# Сохраните все отзывы в файл JSON
с открыть("all_reviews.json", "w", кодировка="utf-8") в роли файл:
    json.dump(all_reviews, file, indent=4, ensure_ascii=Ложь)

Обработка CAPTCHA и антискрейпинговых мер

Google использует CAPTCHA и другие антибот-механизмы, чтобы препятствовать сбору данных. Чтобы обойти эти ограничения, можно использовать сервисы вроде Bright Data или Oxylabs. Эти сервисы предоставляют ротационные прокси и решения для автоматизации браузера, позволяя собирать данные без блокировок.

Вот как использовать прокси-сервис, чтобы обходить CAPTCHA:

  1. Регистрация: создайте аккаунт в Bright Data или Oxylabs и получите ваш API-ключ или учётные данные для прокси.
  2. Настройка прокси: используйте ротационные прокси, чтобы менять IP-адреса и не попасть под блокировку.
  3. Интегрируйте с Selenium: настройте прокси в Selenium, чтобы направлять запросы через сервис.
с сайта selenium.webdriver.chrome.options импорт Опции
chrome_options = Options()
# Пример конфигурации прокси-сервера
прокси = "http://username:password@proxy-server:port"
chrome_options.add_argument(f'--proxy-server={proxy}')
driver = webdriver.Chrome(options=chrome_options)

Полный рабочий сценарий

Вот полный скрипт, объединяющий все шаги выше:

с сайта селен импорт webdriver
с сайта selenium.webdriver.common.by импорт По ссылке
с сайта selenium.webdriver.chrome.options импорт Опции
с сайта bs4 импорт BeautifulSoup
импорт json
импорт время
def setup_driver():
    """Установите и верните Selenium WebDriver"""
    chrome_options = Options()
    # chrome_options.add_argument("--headless") # Убрать комментарий для безголового режима
    драйвер = webdriver.Chrome(options=chrome_options)
    возврат драйвер

def scrape_reviews(driver, url):
    """Соскоб отзывов с одного объявления Google Maps"""
    driver.get(url)
    time.sleep(5)
    
    # Перейдите на вкладку "Отзывы".
    попробуйте:
        reviews_tab = driver.find_element(By.XPATH, "//button[contains(@aria-label, 'Reviews')]")
        reviews_tab.click()
        time.sleep(3)
    кроме Исключение в роли e:
        печать(f"Не удалось нажать вкладку Reviews: {e}")
        возврат []
    
    # Прокрутите панель отзывов, чтобы загрузить другие отзывы
    попробуйте:
        scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde")
        для _ в ассортимент(10):
            driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
            time.sleep(2)
    кроме Исключение в роли e:
        печать(f"Ошибка прокрутки: {e}")
    
    # Нажмите все кнопки "Подробнее", чтобы развернуть усеченные отзывы
    more_buttons = driver.find_elements(By.CSS_SELECTOR, ".w8nwRe.kyuRq")
    для кнопка в more_buttons:
        попробуйте:
            button.click()
            time.sleep(0.5)
        кроме:
            пройти
    
    # Разбор страницы с помощью BeautifulSoup
    html = driver.page_source
    суп = BeautifulSoup(html, "html.parser")
    
    # Найти все контейнеры для отзывов
    отзывы = soup.find_all("div", class_="jftiEf")
    
    review_data = []
    для обзор в отзывы:
        # Имя рецензента
        name_elem = review.find("div", class_="d4r55")
        имя_рецензента = имя_элемента.text.strip() если имя_элемента else "Без имени"
        
        # Текст отзыва
        text_elem = review.find("span", class_="wiI7pd")
        review_text = text_elem.text.strip() если text_elem else «Нет текста отзыва»
        
        Рейтинг # (подсчет заполненных звезд)
        rating_container = review.find("span", class_="hCCjke")
        если rating_container:
            заполненные_звезды = rating_container.find_all("span", class_="NhBTye")
            рейтинг = len(заполненные_звезды)
        else:
            рейтинг = 0
        
        # Дата отзыва
        date_elem = review.find("span", class_="rsqaWe")
        review_date = date_elem.text.strip() если дата_элемент else "Без даты"
        
        review_data.append({
            "рецензент": имя_рецензента,
            "review_text": review_text,
            "рейтинг": рейтинг,
            "review_date": дата_обзора
        })
    
    возврат обзор_данных

def извлечение_списков_урлов(драйвер, search_url):
    """Извлечение URL-адресов объявлений со страницы поиска Google Maps"""
    driver.get(search_url)
    time.sleep(5)
    
    # Прокрутите, чтобы загрузить другие объявления
    попробуйте:
        scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde.ecceSd")
        для _ в ассортимент(5):
            driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
            time.sleep(2)
    кроме Исключение в роли e:
        печать(f"Ошибка прокрутки: {e}")
    
    # Извлечение URL-адресов листингов
    listing_elements = driver.find_elements(By.CSS_SELECTOR, "a.hfpxzc")
    urls = [element.get_attribute("href") для элемент в listing_elements]
    
    возврат урлы

# Основное исполнение
если __name__ == "__main__":
    driver = setup_driver()
    
    попробуйте:
        # Пример одиночного листинга
        single_url = "https://www.google.com/maps/place/The Манхэттен в отеле Таймс-сквер"
        отзывы = scrape_reviews(driver, single_url)
        печать(f "Scraped {len(отзывы)} отзывы из одной карточки")
        
        # Сохранить единое объявление отзывы
        с открыть("single_reviews.json", "w", кодировка="utf-8") в роли файл:
            json.dump(reviews, file, indent=4, ensure_ascii=Ложь)
        
        # Пример множественных объявлений
        search_url = "https://www.google.com/maps/search/hotels в Нью-Йорке"
        listing_urls = extract_listing_urls(driver, search_url)
        печать(f "Found {len(listing_urls)} списки")
        
        all_reviews = []
        для url в listing_urls[:5]:  # Ограничение на первые 5 для демонстрации
            отзывы = scrape_reviews(driver, url)
            all_reviews.append({
                "url": url,
                "отзывы": отзывы
            })
            печать(f "Scraped {len(отзывы)} отзывы из {url[:50]}...")
        
        # Сохранить все отзывы в JSON
        с открыть("all_reviews.json", "w", кодировка="utf-8") в роли файл:
            json.dump(all_reviews, file, indent=4, ensure_ascii=Ложь)
        
        печать("Все отзывы сохранены в файле all_reviews.json".)
    
    наконец-то:
        driver.quit()

Справочник по селекторам CSS

Вот краткая справочная таблица по CSS-селекторам, используемым в этом руководстве:

Справочник по селекторам CSS

⚠️ Важное замечание: Google часто меняет селекторы

Google регулярно обновляет имена CSS-классов и структуру страниц, часто без предупреждения. Селекторы в этом руководстве были проверены по состоянию на январь 2025 года, но они могут сломаться в любой момент.

Если ваш скрейпер внезапно перестанет работать, вам нужно будет:

  1. Откройте Google Maps в браузере
  2. Щелкните правой кнопкой мыши по элементам, которые хотите собрать
  3. Выберите «Inspect», чтобы открыть DevTools
  4. Найдите новые имена классов и обновите код

Для production-сценариев рассмотрите использование профессиональных сервисов для сбора данных, таких как Яркие данные или Oxylabs. Эти платформы предлагают:

  • Готовые API для Google Maps, которые автоматически обрабатывают изменения селекторов
  • Ротационные прокси для защиты от блокировок IP и CAPTCHA
  • Браузеры для скрейпинга со встроенными антидетект-механизмами
  • Структурированный вывод данных без необходимости самостоятельно парсить HTML
  • Показатели успеха 99% даже на сильно защищенных сайтах

Хотя создание собственного скрейпера — отличное учебное упражнение, его долгосрочное сопровождение может потребовать значительных затрат времени. Профессиональные сервисы берут эти сложности на себя и позволяют сосредоточиться на использовании данных, а не на борьбе за их сбор.

Заключительные слова

Сбор отзывов Google Reviews — это ценный инструмент для бизнеса, позволяющий масштабно получать сведения об обратной связи от клиентов. Используя Python и такие библиотеки, как Selenium и BeautifulSoup, вы можете легко собирать отзывы из карточек в Google Maps. Масштабирование этого процесса на несколько карточек может дать ещё более ценные данные для вашего анализа.

Хотя сбор данных с Google связан с рядом сложностей, включая динамическую загрузку контента, бесконечную прокрутку и антибот-защиту, техники, рассмотренные в этом руководстве, помогут их преодолеть. Для задач большего масштаба или production-систем стоит рассмотреть профессиональные сервисы прокси и сбора данных, чтобы обеспечить надежность и избежать блокировок.

С помощью этого руководства вы сможете собирать отзывы из Google Reviews и использовать эти данные, чтобы повысить показатели вашего бизнеса и удовлетворенность клиентов.

Похожие записи