Автоматизация
October 29, 2024

Написание и запуск парсера организаций из Яндекс Карт

Эта статья поможет вам пройти полный цикл настройки и использования API Яндекс для поиска организаций. Мы рассмотрим, как установить необходимые инструменты, получить ключ доступа к API, а также написать скрипт на Python, который поможет автоматизировать сбор данных.

1. Установка Python

Для написания и запуска скриптов на Python необходимо сначала установить сам Python.

Шаг 1: Скачивание Python

  • Перейдите на официальный сайт Python по ссылке: https://www.python.org/downloads/.
  • Для пользователей Windows выберите версию с расширением .exe, для macOS и Linux — подходящие версии для ваших ОС.
  • Рекомендуется устанавливать версию 3.x для большей совместимости.

Шаг 2: Установка Python

  • Запустите скачанный установочный файл.
  • На первом экране обязательно установите галочку «Add Python to PATH», чтобы Python добавился в системные переменные.
  • Нажмите Install Now и дождитесь завершения установки.
  • Для лучшего понимания процесса, добавьте скриншоты, чтобы пользователи могли легко следовать инструкциям.

Шаг 3: Проверка установки

  • Откройте командную строку: нажмите Win + R, введите cmd и нажмите Enter.
  • Введите команду:
python --version
  • Если Python установлен правильно, отобразится установленная версия Python.

2. Установка библиотеки requests

Библиотека requests используется для отправки HTTP-запросов. Она понадобится для взаимодействия с API Яндекс.

  • Откройте командную строку и выполните следующую команду:
pip install requests
  • В случае проблем с установкой, попробуйте запустить командную строку от имени администратора.
  • Проверьте, что библиотека установлена, с помощью команды:
pip show requests
  • Если всё установлено правильно, вы увидите информацию о библиотеке.

3. Регистрация и настройка API Яндекс

Для работы с API Яндекс необходимо зарегистрироваться и настроить доступ через Яндекс.Облако.

Шаг 1: Регистрация в Яндекс.Облаке

  • Перейдите на Яндекс.Облако и войдите в свой аккаунт. Если у вас нет аккаунта, зарегистрируйтесь.
  • На главной странице панели управления Яндекс.Облака нажмите Создать облако и задайте ему имя, например, «Проект Новосибирск».
  • Яндекс.Облако может потребовать привязку банковской карты для подтверждения личности. Это нужно даже для получения бесплатного тарифа.

Шаг 2: Создание каталога

  • Внутри созданного облака создайте каталог. Каталоги помогают структурировать проекты и ключи API. Назовите его, например, «Автосервисы Новосибирск».

Шаг 3: Подключение API поиска по организациям

Шаг 4: Создание API-ключа

  • Перейдите в раздел «Управление доступом» и найдите раздел «API-ключи».
  • Нажмите Создать API-ключ и дайте ему название, например, «API для автосервисов».
  • Скопируйте полученный ключ, он понадобится для выполнения запросов.
Не забудьте выбрать и оплатить тариф использования API

4. Написание Скрипта для Парсинга Данных

Теперь, когда у нас есть API-ключ, можно написать скрипт для получения данных о организациях в заданном регионе.

Шаг 1: Открытие редактора и создание файла

  • Рекомендую использовать редактор с подсветкой синтаксиса, например PyCharm. Если редактора нет, скачайте и установите его.
  • Создайте новый файл с названием, например, novosibirsk_autoservices.py.

Шаг 2: Вставка кода в файл

  • Скопируйте и вставьте следующий код в ваш файл, заменив значение API_KEY вашим ключом.
import requests
import csv
import logging

# Настройка логирования
logging.basicConfig(filename='errors.log', level=logging.ERROR,
                    format='%(asctime)s - %(levelname)s - %(message)s')

# Укажи API-ключ Яндекс.Карт
API_KEY = "ваш_ключ_API"  # Вставь сюда свой API-ключ
SEARCH_TEXT = "автосервис"  # Что ищем (можно менять на другие категории)
LOCATION = "82.9204,55.0302"  # Координаты Новосибирска
RADIUS = 5000  # Радиус поиска в метрах (например, 5 км) - пока не используется напрямую

# Формирование URL запроса
url = f"https://search-maps.yandex.ru/v1/?text={SEARCH_TEXT}&ll={LOCATION}&spn=0.1,0.1&rspn=1&type=biz&results=50&lang=ru_RU&apikey={API_KEY}"

try:
    # Отправка запроса и получение данных
    response = requests.get(url, timeout=10)
    response.raise_for_status()  # Проверка на успешный статус ответа
    data = response.json()

    # Проверка наличия данных в ответе
    if 'features' not in data or not data['features']:
        raise ValueError("Поле 'features' отсутствует или пустое в ответе API.")

    # Сохранение данных в CSV файл
    with open('novosibirsk_autobase.csv', mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(["Название", "Телефон", "Адрес"])

        for org in data['features']:
            properties = org.get('properties', {}).get('CompanyMetaData', {})
            name = properties.get('name', 'Не указано')

            # Проверка на наличие телефонов
            phones = properties.get('Phones', [])
            phone = phones[0].get('formatted', 'Не указано') if phones else 'Не указано'

            # Получение адреса
            address = properties.get('address', 'Не указано')
            writer.writerow([name, phone, address])

    print("Данные сохранены в файле novosibirsk_autobase.csv")

except requests.exceptions.RequestException as e:
    error_message = f"Произошла ошибка при выполнении запроса: {e}"
    print(error_message)
    logging.error(error_message)
except Exception as e:
    error_message = f"Непредвиденная ошибка: {e}"
    print(error_message)
    logging.error(error_message)

5. Запуск Скрипта

Теперь, когда скрипт готов, можно его запустить.

  • Откройте командную строку и перейдите в папку, где сохранён ваш файл. Для этого используйте команду cd:
cd путь_к_папке_с_файлом
  • Например, если файл сохранен на рабочем столе:
cd C:\Users\Имя_пользователя\Desktop
  • Запустите скрипт командой:
python novosibirsk_autoservices.py
  • Скрипт выполнит запрос к API и сохранит данные в файл novosibirsk_autobase.csv.

6. Проверка Результатов

  • Найдите файл novosibirsk_autobase.csv в папке, где находится скрипт.
  • Откройте файл, чтобы убедиться, что данные корректно сохранились. CSV-файл будет содержать названия, телефоны и адреса найденных организаций.
  • Для удобства можно открыть файл в Excel или Google Sheets, чтобы сделать данные более наглядными.

Советы и Подсказки

  • Работа с ошибками API: Возможны ошибки, такие как 403 Forbidden или 429 Too Many Requests. Убедитесь, что вы правильно указали ключ и не превысили лимит запросов.
  • Дополнительные возможности: Вы можете адаптировать запрос, чтобы искать другие типы организаций. Попробуйте изменить параметр SEARCH_TEXT на что-то другое, например, «ресторан» или «аптека».
  • Автоматизация: Если вы хотите собирать данные регулярно, настройте запуск скрипта по расписанию с помощью Планировщика задач Windows или cron для Linux.

Теперь у вас есть полноценная инструкция по установке Python, настройке API Яндекс и написанию скрипта для автоматического сбора данных. Если потребуется помощь, обращайтесь @zinchenki