Как собирать данные из магазинов Shopify с помощью Python
В этой статье я покажу, как скрапить магазины Shopify с помощью Python. Независимо от того, разработчик вы, маркетолог или исследователь, это руководство покажет вам, как все настроить и начать собирать данные без лишних усилий. Начнем!
Что такое Shopify?
Shopify — это eCommerce-платформа, которая позволяет компаниям создавать онлайн-магазины. Она предоставляет владельцам магазинов различные инструменты для управления запасами, обработки платежей и организации логистики. Каждый магазин Shopify построен на шаблоне, который ориентирован на удобный интерфейс как для владельцев магазинов, так и для покупателей.
Одна из ключевых особенностей Shopify - использование JSON-файлов для хранения данных о товарах. В этих файлах содержится вся необходимая информация о товарах в магазине, включая названия, описания, цены, изображения и варианты.
Зачем собирать данные из магазинов Shopify?
Парсинг Shopify-магазинов может использоваться для разных целей, например:
- Исследование продукта: Сбор данных о товарах, включая цены, наличие и характеристики.
- Анализ конкурентов: Отслеживание магазинов конкурентов на предмет изменений цен или запуска новых товаров.
- Сбор данных: Сбор больших наборов данных для исследовательских или аналитических целей.
Хорошая новость в том, что Shopify относительно просто предоставляет доступ к данным о товарах в формате JSON, что упрощает процесс скрапинга. Вместо того чтобы разбираться со сложным HTML-парсингом, можно напрямую получать данные о товарах в структурированном формате.
🛡️ Используйте Bright Data Proxies для надежного сбора данных из Shopify
При парсинге нескольких Shopify-магазинов или работе с большими каталогами товаров ваш IP может попасть под ограничение частоты запросов или быть заблокирован. Чтобы избежать этого, рассмотрите использование Residential от Bright Data или Datacenter Proxies. Они помогают ротировать IP-адреса, обходить геоограничения и поддерживать стабильный доступ — особенно полезно при сборе данных в больших объемах или в разных регионах.
Интересуют другие провайдеры? Ознакомьтесь с моим списком лучшие прокси-провайдеры!
Примечание: я не аффилирован ни с одним из этих провайдеров.
Настройка окружения
Прежде чем мы начнем писать код для скрапинга, нужно настроить окружение. Первый шаг - убедиться, что установлены необходимые библиотеки Python.
Шаг 1: Установите Python Requests
Библиотека requests — основной инструмент, который мы будем использовать для отправки HTTP-запросов к API-эндпоинту Shopify-магазина и получения JSON-данных. Чтобы установить её, выполните следующую команду в терминале:
pip install requests
Шаг 2: Установите библиотеку JSON (необязательно)
Python поставляется со встроенной библиотекой JSON, поэтому вам не нужно устанавливать ее отдельно. Эта библиотека позволяет легко разбирать и манипулировать данными JSON.
импорт json
Теперь, когда окружение настроено, можно приступать к написанию скрипта для сбора данных.
Сбор данных из Shopify
Понимание структуры JSON в Shopify
Магазины Shopify предоставляют данные о товарах через конечную точку /products.json. Эта конечная точка JSON содержит все данные о продукте, включая:
- Название: Название продукта.
- ID: Уникальный идентификатор товара.
- Варианты: Разные варианты товара, например размер или цвет.
- Изображения: Изображения продукта.
- Опции: Параметры товара, такие как размер или цвет.
Например, простой ответ API может выглядеть так:
{
"продукты": [
{
"id": 123456789,
"title": "Продукт 1",
"variants": [
{
"id": 987654321,
"title": "Small",
"price": "19.99"
}
],
"images": [
{
"src": "https://example.com/image.jpg"
}
]
}
]
}
Скрипт для скрапинга
Скрапинг данных
импорт requests
импорт json
def scrape_shopify(url):
""""Соскоб данных о товарах из магазина Shopify"""
json_url = f"{url}products.json" # Добавьте '/products.json' в базовый URL магазина
продукты = [] # Здесь будут храниться отбракованные продукты
попробуйте:
response = requests.get(json_url)
response.raise_for_status() # Вызов ошибки при неудачном запросе
data = response.json() # Преобразование ответа в JSON
для продукт в данные["продукты"]: # Итерация по каждому продукту
информация о продукте = {
"title": продукт["title"],
"id": продукт["id"],
"варианты": продукт["варианты"],
"изображения": продукт["изображения"],
"опции": продукт["опции"]
}
products.append(product_info) # Добавить информацию о продукте в наш список
кроме requests.RequestException в роли e:
печать(f "Ошибка: {e}")
кроме json.JSONDecodeError:
печать("Ошибка при разборе JSON-ответа.")
возврат продукция
Пояснение к коду
- Начнем с определения функции scrape_shopify(), которая принимает базовый URL-адрес магазина Shopify.
- Мы создаем URL в формате JSON, добавляя /products.json к базовому URL.
- Мы используем метод requests.get(), чтобы отправить HTTP-запрос в магазин Shopify.
- Если запрос выполнен успешно, ответ преобразуется в формат JSON.
- Затем мы проходим по каждому товару в JSON-ответе, извлекая ключевые сведения, такие как название товара, ID, варианты, изображения и опции.
- Мы сохраняем данные о каждом товаре в списке products, который в итоге будет возвращён функцией.
Сохранение данных в файл
После того как данные собраны, их нужно сохранить для дальнейшего использования. Поскольку мы имеем дело с вложенными данными (варианты, изображения и т. д.), лучше сохранять их в JSON, а не в CSV-файл.
Вот как записать собранные данные в файл:
def сохранить_в_json(data, filename):
"""Сохраните собранные данные в JSON-файл"""
попробуйте:
с открыть(filename, "w", кодировка="utf-8") в роли f:
json.dump(data, f, indent=4)
печать(f"Data saved to {filename}")
кроме Исключение в роли e:
печать(f"Ошибка при сохранении файла: {e}")
Собираем всё воедино
Теперь соберём всё вместе в основном блоке, чтобы запустить скрапер и сохранить данные.
если __name__ == "__main__":
shop_url = "https://example-store.com/" # Замените на URL-адрес целевого магазина Shopify
товары = scrape_shopify(shop_url) # Поскребите магазин
save_to_json(products, "products.json") # Сохраните отсканированные данные в файл
Этот скрипт скрапит магазин Shopify по заданному URL-адресу, получит все данные о товарах и сохранит их в файл products.json.
Продвинутые техники парсинга Shopify
Работа с пагинацией
У многих магазинов Shopify большое количество товаров, распределённых по нескольким страницам. Чтобы собрать все товары, нужно обрабатывать пагинацию. К счастью, Shopify поддерживает пагинацию в своём API, что позволяет собирать данные с нескольких страниц.
Чтобы обработать пагинацию, мы просто добавляем к URL параметр page. Например:
json_url = f"{url}products.json?page={номер_страницы}"
Мы можем изменить нашу функцию парсинга, чтобы она собирала данные с нескольких страниц:
def scrape_shopify(url, total_pages):
all_products = []
для страница в ассортимент(1, total_pages 1):
json_url = f"{url}products.json?page={page}"
продукты = requests.get(json_url).json()["продукты"]
для продукт в продукты:
product_info = {
"title": продукт["title"],
"id": продукт["id"],
"варианты": продукт["варианты"],
"изображения": продукт["изображения"],
"опции": продукт["опции"]
}
all_products.append(product_info)
возврат все_продукты
Использование прокси-серверов
Иногда сайты блокируют запросы с одного IP-адреса, если слишком много запросов отправляется слишком быстро. Чтобы избежать этого, можно использовать прокси. Вот как можно встроить прокси в свои запросы:
прокси = {
"http": "http://username:[email protected]",
"https": "http://username:[email protected]"
}
response = requests.get(json_url, proxies=proxies)
Заключение
Скраппинг магазинов Shopify с помощью Python очень прост, благодаря Shopify JSON API. Добавив/products.json к URL-адресу магазина, вы сможете легко получить доступ к структурированным данным о товарах без необходимости сложного разбора HTML. С помощью всего нескольких строк кода на Python вы можете собрать такие данные, как варианты товаров, изображения и цены, и сохранить их для анализа. Чтобы скрапить большие магазины, вы можете использовать такие приемы, как обработка пагинации и интеграция прокси для более плавного скрапинга. Всегда соблюдайте условия обслуживания магазина и подходите к скрапу ответственно.

