Як зібрати відгуки Google: покроковий гайд

У цьому посібнику я покажу, як виконувати вебскрапінг Google Reviews за допомогою Python, щоб легко збирати й аналізувати дані зі списків Google Maps. Якщо ви хочете відстежувати настрої клієнтів, помічати тренди або просто збирати відгуки у великих обсягах, цей простий і масштабований метод допоможе вам впоратися із завданням. Отже, у вас буде чіткий процес, щоб почати вебскрапінг і витягування корисних даних із Google Reviews для розвитку вашого бізнесу.

Маєте обмаль часу? Ось 3 найкращі провайдери для вебскрапінгу Google Reviews без зайвого клопоту:

  1. Bright Data: Лідер галузі зі спеціалізованими API Google Maps, ротаційними проксі та браузером для вебскрапінгу, який автоматично обходить антиботові обмеження. Найкращий варіант для масштабування й надійності.
  2. Oxylabs: Потужна інфраструктура для вебскрапінгу з API SERP у реальному часі та розгалуженими мережами проксі. Чудово підходить для збирання даних корпоративного рівня.
  3. ScraperAPI: Простий API, який бере на себе проксі, браузери й CAPTCHA. Бюджетний варіант для менших проєктів.

👇 Хочете створити власний вебскрапер? Продовжуйте читати повний посібник з Python.

Що таке вебскрапінг?

Вебскрапінг — це процес витягування даних із вебсайтів. Він передбачає отримання вмісту вебсторінки та вилучення потрібної вам інформації. Коли йдеться про Google Reviews, вебскрапінг допомагає бізнесу збирати цінні відгуки клієнтів про свої товари або послуги.

Ці дані можна використовувати для аналізу думок клієнтів, виявлення напрямків для вдосконалення або звітування про показники бізнесу. Під час вебскрапінгу Google Reviews компанії можуть отримати уявлення про задоволеність клієнтів і використати цю інформацію, щоб покращити загальний клієнтський досвід та ухвалювати обґрунтовані рішення для зростання.

Навіщо збирати відгуки Google?

Google Reviews — це справжня скарбниця інформації. Вони надають бізнесу прямий зворотний зв’язок від клієнтів, що може бути корисним у кількох аспектах:

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

Вебскрапінг Google Reviews допомагає бізнесу отримувати ці інсайти у великих масштабах, заощаджуючи час і зусилля порівняно з ручним читанням окремих відгуків.

Інструменти, потрібні для вебскрапінгу відгуків Google

Щоб виконати вебскрапінг Google Reviews, вам знадобляться такі інструменти:

  • Мова програмування: Python — одна з найпопулярніших мов для вебскрапінгу завдяки своїй простоті та потужним бібліотекам.
  • Бібліотеки: у цьому туторіалі ми використаємо такі бібліотеки, як requestsBeautifulSoup, і Selenium для вебскрапінгу. BeautifulSoup допомагає розбирати HTML-вміст вебсторінки, тоді як Selenium може працювати із сайтами, насиченими JavaScript, як-от Google Maps.
  • Proxy Services: 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 і натискає вкладку відгуків.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
# Set up the Selenium WebDriver (Selenium 4  auto-manages ChromeDriver)
chrome_options = Options()
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.google.com/maps/place/The Manhattan at Times Square Hotel")
# Wait for the page to load
time.sleep(5)
# Click the reviews tab using a flexible selector
reviews_tab = driver.find_element(By.XPATH, "//button[contains(@aria-label, 'Reviews')]")
reviews_tab.click()
# Wait for reviews to load
time.sleep(3)

Крок 4: Прокрутіть сторінку, щоб завантажити всі відгуки

Google Maps використовує нескінченне прокручування в окремій панелі для завантаження відгуків, а не в тілі вікна. Щоб зібрати всі відгуки, потрібно імітувати прокручування всередині контейнера відгуків.

# Find the scrollable reviews panel
scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde")
# Scroll within the panel to load all reviews
for _ in range(10):  # Adjust the range for more scrolling
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
    time.sleep(2)

Крок 5: Витягніть дані відгуків

Коли відгуки завантажаться, можна використати BeautifulSoup, щоб розібрати сторінку й витягти дані про відгуки. Ось приклад того, як витягти текст відгуку, ім'я автора відгуку, оцінку та дату:

from bs4 import BeautifulSoup
# Get page source after scrolling
html = driver.page_source
# Parse the page using BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
# Find all review containers
reviews = soup.find_all("div", class_="jftiEf")
# Extract relevant data from each review
review_data = []
for review in reviews:
    # Reviewer name
    name_elem = review.find("div", class_="d4r55")
    reviewer_name = name_elem.text.strip() if name_elem else "Без імені"
    
    # Review text
    text_elem = review.find("span", class_="wiI7pd")
    review_text = text_elem.text.strip() if text_elem else "Без тексту відгуку"
    
    # Rating (count filled stars)
    rating_container = review.find("span", class_="hCCjke")
    if rating_container:
        filled_stars = rating_container.find_all("span", class_="NhBTye")
        rating = len(filled_stars)
    else:
        rating = 0
    
    # Review date
    date_elem = review.find("span", class_="rsqaWe")
    review_date = date_elem.text.strip() if date_elem else "Немає дати"
    review_data.append({
        "reviewer": reviewer_name,
        "review_text": review_text,
        "rating": рейтинг,
        "review_date": review_date
    })
print(review_data)

Крок 6: Обробка кнопки “Більше” для довгих відгуків

Деякі відгуки можуть бути обрізані кнопкою «Ще», яка приховує частину тексту відгуку. Ви можете автоматизувати натискання цієї кнопки за допомогою Selenium:

# Click "More" to reveal the full review text
more_buttons = driver.find_elements(By.CSS_SELECTOR, ".w8nwRe.kyuRq")
for button in more_buttons:
    try:
        button.click()
        time.sleep(0.5)
    except:
        pass  # Button may not be clickable or visible

Крок 7: Збережіть дані

Після того, як ви витягнете дані, їх можна зберегти у CSV, JSON або базі даних. У цьому прикладі ми збережемо дані у файл JSON.

import json
with open("reviews.json", "w", encoding="utf-8") as file:
    json.dump(review_data, file, indent=4, ensure_ascii=False)

Масштабування процесу вебскрапінгу для кількох лістингів

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

Крок 1: Витягніть кілька URL

Сторінки пошуку Google Maps містять посилання на окремі бізнес-лістинги. Щоб зібрати відгуки з кількох лістингів, спочатку витягніть URL бізнес-лістингів зі сторінки пошуку.

def extract_listing_urls(search_url):
    driver.get(search_url)
    time.sleep(5)
# Find the scrollable search results panel
    try:
        scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde.ecceSd")
        for _ in range(5):
            driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
            time.sleep(2)
    except Exception as e:
        print(f"Помилка прокручування: {e}")
    # Extract the URLs of the listings
    listing_elements = driver.find_elements(By.CSS_SELECTOR, "a.hfpxzc")
    urls = [element.get_attribute("href") for element in listing_elements]
    return urls
listing_urls = extract_listing_urls("https://www.google.com/maps/search/hotels in new york")
print(listing_urls)

Крок 2: Зберіть відгуки з кожного лістингу

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

all_reviews = []
for url in listing_urls:
    reviews = scrape_reviews(url)
    all_reviews.append({
        "url": url,
        "reviews": reviews
    })
# Save all reviews to a JSON file
with open("all_reviews.json", "w", encoding="utf-8") as file:
    json.dump(all_reviews, file, indent=4, ensure_ascii=False)

Робота з CAPTCHA та заходами протидії вебскрапінгу

Google використовує CAPTCHA та інші антибот-заходи, щоб запобігти вебскрапінгу. Щоб обійти ці обмеження, можна використовувати сервіси на кшталт Bright Data або Oxylabs. Ці сервіси надають ротаційні проксі та рішення для автоматизації браузера, що дає змогу збирати дані без блокування.

Ось як використати проксі-сервіс, щоб обійти CAPTCHA:

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

Complete Working Script

Ось повний скрипт, що поєднує всі наведені вище кроки:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import json
import time
def setup_driver():
    """Set up and return the Selenium WebDriver"""
    chrome_options = Options()
    # chrome_options.add_argument("--headless")  # Uncomment for headless mode
    driver = webdriver.Chrome(options=chrome_options)
    return driver

def scrape_reviews(driver, url):
    """Scrape reviews from a single Google Maps listing"""
    driver.get(url)
    time.sleep(5)
    
    # Click the Reviews tab
    try:
        reviews_tab = driver.find_element(By.XPATH, "//button[contains(@aria-label, 'Reviews')]")
        reviews_tab.click()
        time.sleep(3)
    except Exception as e:
        print(f"Не вдалося натиснути вкладку Reviews: {e}")
        return []
    
    # Scroll within the reviews panel to load more reviews
    try:
        scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde")
        for _ in range(10):
            driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
            time.sleep(2)
    except Exception as e:
        print(f"Помилка прокручування: {e}")
    
    # Click all "More" buttons to expand truncated reviews
    more_buttons = driver.find_elements(By.CSS_SELECTOR, ".w8nwRe.kyuRq")
    for button in more_buttons:
        try:
            button.click()
            time.sleep(0.5)
        except:
            pass
    
    # Parse page with BeautifulSoup
    html = driver.page_source
    soup = BeautifulSoup(html, "html.parser")
    
    # Find all review containers
    reviews = soup.find_all("div", class_="jftiEf")
    
    review_data = []
    for review in reviews:
        # Reviewer name
        name_elem = review.find("div", class_="d4r55")
        reviewer_name = name_elem.text.strip() if name_elem else "Без імені"
        
        # Review text
        text_elem = review.find("span", class_="wiI7pd")
        review_text = text_elem.text.strip() if text_elem else "Без тексту відгуку"
        
        # Rating (count filled stars)
        rating_container = review.find("span", class_="hCCjke")
        if rating_container:
            filled_stars = rating_container.find_all("span", class_="NhBTye")
            rating = len(filled_stars)
        else:
            rating = 0
        
        # Review date
        date_elem = review.find("span", class_="rsqaWe")
        review_date = date_elem.text.strip() if date_elem else "Немає дати"
        
        review_data.append({
            "reviewer": reviewer_name,
            "review_text": review_text,
            "rating": рейтинг,
            "review_date": review_date
        })
    
    return review_data

def extract_listing_urls(driver, search_url):
    """Extract listing URLs from a Google Maps search page"""
    driver.get(search_url)
    time.sleep(5)
    
    # Scroll to load more listings
    try:
        scrollable_div = driver.find_element(By.CSS_SELECTOR, ".m6QErb.DxyBCb.kA9KIf.dS8AEf.XiKgde.ecceSd")
        for _ in range(5):
            driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollable_div)
            time.sleep(2)
    except Exception as e:
        print(f"Помилка прокручування: {e}")
    
    # Extract listing URLs
    listing_elements = driver.find_elements(By.CSS_SELECTOR, "a.hfpxzc")
    urls = [element.get_attribute("href") for element in listing_elements]
    
    return urls

# Main execution
if __name__ == "__main__":
    driver = setup_driver()
    
    try:
        # Single listing example
        single_url = "https://www.google.com/maps/place/The Manhattan at Times Square Hotel"
        reviews = scrape_reviews(driver, single_url)
        print(f"Scraped {len(reviews)} відгуки з одного лістингу")
        
        # Save single listing reviews
        with open("single_reviews.json", "w", encoding="utf-8") as file:
            json.dump(reviews, file, indent=4, ensure_ascii=False)
        
        # Multiple listings example
        search_url = "https://www.google.com/maps/search/hotels in new york"
        listing_urls = extract_listing_urls(driver, search_url)
        print(f"Found {len(listing_urls)} listings")
        
        all_reviews = []
        for url in listing_urls[:5]:  # Limit to first 5 for demo
            reviews = scrape_reviews(driver, url)
            all_reviews.append({
                "url": url,
                "reviews": reviews
            })
            print(f"Scraped {len(reviews)} відгуки з {url[:50]}...")
        
        # Save all reviews to JSON
        with open("all_reviews.json", "w", encoding="utf-8") as file:
            json.dump(all_reviews, file, indent=4, ensure_ascii=False)
        
        print("All reviews saved to all_reviews.json")
    
    finally:
        driver.quit()

CSS Selector Reference

Ось коротка довідкова таблиця CSS-селекторів, використаних у цьому посібнику:

CSS Selector Reference

⚠️ Важлива примітка: Google часто змінює селектори

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

Якщо ваш вебскрапер раптово перестане працювати, вам потрібно буде:

  1. Відкрийте Google Maps у браузері
  2. Клацніть правою кнопкою миші на елементах, які потрібно зібрати
  3. Виберіть «Inspect», щоб відкрити DevTools
  4. Знайдіть нові назви класів і оновіть свій код

Для продакшн-сценаріїв розгляньте використання професійних сервісів для вебскрапінгу, як-от Bright Data or Oxylabs. Ці платформи пропонують:

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

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

Final Words

Вебскрапінг Google Reviews — цінний інструмент для бізнесу, що дає змогу отримувати інсайти з відгуків клієнтів у великому масштабі. За допомогою Python і таких бібліотек, як Selenium та BeautifulSoup, ви можете легко вебскрапити відгуки з лістингів у Google Maps. Масштабування цього процесу для кількох лістингів може дати ще цінніші дані для вашого аналізу.

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

За цим посібником ви тепер можете вебскрапити Google Reviews і використовувати дані, щоб покращити результати свого бізнесу та рівень задоволеності клієнтів.

Схожі записи