Руководство по Python для скрапинга результатов поиска Google

Руководство по Python для скрапинга результатов поиска Google

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

Как устроена поисковая выдача Google

Термин «SERP» (Search Engine Results Page) часто встречается в обсуждениях скрапинга Google. Он обозначает страницу, которая отображается после ввода поискового запроса. В отличие от простых списков ссылок прошлого, современные SERP насыщены различными элементами, улучшающими пользовательский опыт. К ключевым элементам относятся featured snippets, платные объявления, видеокарусели, блоки «People also ask», local packs и связанные запросы.

Законность сбора результатов поиска Google

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

Проблемы при скрапинге результатов поиска Google

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

  1. Google использует CAPTCHA, чтобы отличать ботов от людей; если их не пройти, IP может быть заблокирован.
  2. Блокировки IP: действия по скрапингу могут вызвать бан IP, если сайт распознает их как подозрительные.
  3. Неструктурированные данные: для эффективного анализа собранные данные должны быть хорошо структурированы.

Oxylabs Google Search API предназначен для решения этих проблем, предоставляя структурированные данные Google Search без необходимости обслуживать скрапер.

  1. Основные библиотеки Python для сбора результатов поиска Google

Чтобы приступить к этому руководству по извлечению данных из поисковой выдачи Google с помощью Python, убедитесь, что у вас есть всё необходимое:

  • Учетные данные для SERP API от Oxylabs
  • Python installation
  • Библиотека Requests

Сначала зарегистрируйтесь для доступа к Google Search Results API от Oxylabs, чтобы получить имя пользователя и пароль, которые понадобятся вам на протяжении всего руководства. Затем установите Python (версии 3.8 или новее) с официального сайта Python. Наконец, вам понадобится библиотека Requests, которая отлично справляется с HTTP-запросами. Установите её с помощью следующей команды:

Для macOS/Linux:

$python3 -m pip install requests

For Windows:

d:amazon>python -m pip install requests

2. Формирование payload и выполнение POST-запроса
Создайте новый Python-скрипт и вставьте следующий код:

импорт requests
с сайта pprint импорт pprint
payload = {
    'source': 'google',
    'url': 'https://www.google.com/search?hl=en&q=newton'  # Example search for 'newton'
}response = requests.request(
    'POST',
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)pprint(response.json())

Этот скрипт вернёт ответ, похожий на следующий:

{
    "results": [
        {
            "содержание": "<!doctype html>...",
            "created_at": "YYYY-DD-MM HH:MM:SS",
            "updated_at": "YYYY-DD-MM HH:MM:SS",
            "page": 1,
            "url": "https://www.google.com/search?hl=en&q=newton",
            "job_id": "1234567890123456789",
            "status_code": 200
        }
    ]
}

Обратите внимание, что URL в payload представляет собой страницу результатов поиска Google по запросу ‘newton’.

3. Customizing Query Parameters

Словарь payload можно адаптировать под ваши задачи скрапинга. Например:

полезная нагрузка = {
    'source': 'google',
    'url': 'https://www.google.com/search?hl=en&q=newton'
}

Here, ‘source’ is a key parameter, defaulting to Google, and the URL specifies the Google search page. There are various other parameters available, such as ‘google_ads’, ‘google_hotels’, and more, detailed in the Oxylabs documentation.

When configuring the payload, remember that using ‘google_search’ as the source disallows the use of the URL parameter. However, you can utilize multiple parameters for different data types without needing multiple URLs.

To refine your results further, you can add parameters like ‘domain’, ‘geo_location’, and ‘locale’ to your payload. For example:

полезная нагрузка = {
    'source': 'google_search',
    'query': 'newton',
    'domain': 'de',
    'geo_location': 'Germany',
    'locale': 'en-us'
}

This configuration fetches American English results from google.de, as seen in Germany. You can also control the volume of results using ‘start_page’, ‘pages’, and ‘limit’ parameters. For instance, to fetch results from pages 11 and 12, with 20 results per page:

полезная нагрузка = {
    'start_page': 11,
    'pages': 2,
    'limit': 20,
    ...  # Additional parameters
}

4. Итоговый Python-скрипт для сбора данных из поисковой выдачи Google

Объединив все элементы, вот полный пример скрипта:

импорт requests
с сайта pprint импорт pprint
payload = {
    'source': 'google_search',
    'query': 'shoes',
    'domain': 'de',
    'geo_location': 'Germany',
    'locale': 'en-us',
    'parse': True,
    'start_page': 1,
    'pages': 5,
    'limit': 10,
}response = requests.request(
    'POST',
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)if response.status_code != 200:
    print("Error - ", response.json())
    exit(-1)pprint(response.json())

5. Экспорт данных в CSV

Google от Oxylabs Scraper API может преобразовывать HTML-страницы в JSON, устраняя необходимость в BeautifulSoup или похожих библиотеках. Например:

полезная нагрузка = {
    'source': 'google_search',
    'query': 'adidas',
    'parse': Правда,
}

Результаты возвращаются в формате JSON, который можно эффективно нормализовать с помощью библиотеки Pandas:

импорт панды в роли pd
data = response.json()
df = pd.json_normalize(data['results'])
df.to_csv('export.csv', index=False)

6. Обработка ошибок и исключений

Если возникнут проблемы вроде сетевых сбоев или неверных параметров, используйте блоки try-except:

попробуйте:
    response = requests.request(
        'POST',
        'https://realtime.oxylabs.io/v1/queries',
        auth=('USERNAME', 'PASSWORD'),
        json=payload,
    )
кроме requests.exceptions.RequestException в роли e:
    печать("Ошибка:", e)
if response.status_code != 200:
    print("Error - ", response.json())

Заключение

Это руководство призвано дать вам знания, необходимые для собирать данные из Google результаты поиска с помощью Python. Если вам нужна дополнительная помощь или есть вопросы, служба поддержки Oxylabs доступна по электронной почте или в live chat.

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