Як виконувати вебскрапінг магазинів Shopify за допомогою Python
У цій статті я проведу вас через процес вебскрапінгу магазинів Shopify за допомогою Python. Незалежно від того, чи ви розробник, маркетолог або дослідник, цей посібник покаже, як усе налаштувати й почати збирати дані без зайвих зусиль. Почнімо!
Що таке Shopify?
Shopify — це платформа електронної комерції, яка дає бізнесу змогу створювати інтернет-магазини. Вона надає власникам магазинів різні інструменти для керування запасами, обробки платежів і логістики. Кожен магазин Shopify побудовано на шаблоні, орієнтованому на зручний інтерфейс для власників і покупців.
Одна з ключових можливостей Shopify — використання JSON-файлів для зберігання даних про товари. У цих файлах міститься вся необхідна інформація про товари в магазині, зокрема назви, описи, ціни, зображення та варіанти.
Навіщо виконувати вебскрапінг магазинів Shopify?
Вебскрапінг магазинів Shopify може бути корисним для різних завдань, зокрема:
- Product Research: Збирання даних про товари, зокрема ціни, наявність і характеристики.
- Competitor Analysis: Моніторинг магазинів конкурентів щодо змін цін або запуску нових продуктів.
- Data Collection: Збирання великих наборів даних для дослідження або аналізу.
Добра новина в тому, що 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 comes with a built-in JSON library, so you don’t need to install it separately. This library allows you to parse and manipulate JSON data easily.
import json
Тепер, коли наше середовище налаштовано, ми готові почати писати скрипт для вебскрапінгу.
Вебскрапінг даних із Shopify
Розуміння JSON-структури Shopify
Shopify stores provide product data through the /products.json endpoint. This JSON endpoint contains all the product details, including:
- Title: Назва продукту.
- ID: Унікальний ідентифікатор продукту.
- Variants: Різні варіанти продукту, наприклад розмір або колір.
- Images: Зображення продукту.
- Options: Варіанти продукту, наприклад розмір або колір.
Наприклад, проста відповідь API може виглядати так:
{
"products": [
{
"id": 123456789,
"title": "Product 1",
"variants": [
{
"id": 987654321,
"title": "Small",
"price": "19.99"
}
],
"images": [
{
"src": "https://example.com/image.jpg"
}
]
}
]
}
The Scraping Script
Let’s start with the basic function that will scrape product data from a Shopify store.
import requests
import json
def scrape_shopify(url):
"""Scrape product data from a Shopify store"""
json_url = f"{url}products.json" # Add the '/products.json' to the store's base URL
products = [] # This will store the scraped products
try:
response = requests.get(json_url)
response.raise_for_status() # Raise an error if the request fails
data = response.json() # Convert the response to JSON
for product in data["products"]: # Iterate through each product
product_info = {
"title": product["title"],
"id": product["id"],
"variants": product["variants"],
"images": product["images"],
"options": product["options"]
}
products.append(product_info) # Add product information to our list
except requests.RequestException as e:
print(f"Error: {e}")
except json.JSONDecodeError:
print("Помилка під час розбору JSON-відповіді.")
return products
Пояснення коду
- We start by defining the function scrape_shopify(), which takes the base URL of the Shopify store.
- We construct the JSON URL by appending /products.json to the base URL.
- We use the requests.get() method to send an HTTP request to the Shopify store.
- Якщо запит успішний, відповідь перетворюється у формат JSON.
- Далі ми ітеруємося по кожному продукту у JSON-відповіді, витягуючи ключові деталі, як-от назву продукту, ID, варіанти, зображення та параметри.
- Ми зберігаємо інформацію про кожен продукт у списку products, який згодом буде повернуто функцією.
Збереження даних у файл
Щойно дані зібрано, нам потрібно зберегти їх для подальшого використання. Оскільки ми маємо справу з вкладеними даними (варіанти, зображення тощо), найкраще зберегти їх у JSON, а не у CSV-файл.
Ось як записати зібрані дані у файл:
def save_to_json(data, filename):
"""Save the scraped data to a JSON file"""
try:
with open(filename, "w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
print(f"Дані збережено в {filename}")
except Exception as e:
print(f"Error saving file: {e}")
Об'єднуємо все разом
Тепер зберімо все разом у блоці `main`, щоб запустити вебскрапер і зберегти дані.
if __name__ == "__main__":
shop_url = "https://example-store.com/" # Replace with the target Shopify store URL
products = scrape_shopify(shop_url) # Scrape the store
save_to_json(products, "products.json") # Save the scraped data to a file
This script will scrape the Shopify store at the given URL, retrieve all product data, and save it to a file called products.json.
Просунуті техніки вебскрапінгу Shopify
Handling Pagination
Багато магазинів Shopify мають велику кількість продуктів, розподілених на кількох сторінках. Щоб зібрати всі продукти, нам потрібно обробляти пагінацію. На щастя, Shopify підтримує пагінацію у своєму API, що дає змогу збирати дані з кількох сторінок.
Щоб обробити пагінацію, ми просто додаємо параметр `page` до URL. Наприклад:
json_url = f"{url}products.json?page={page_number}"
Можемо змінити нашу функцію вебскрапінгу, щоб збирати дані з кількох сторінок:
def scrape_shopify(url, total_pages):
all_products = []
for page in range(1, total_pages 1):
json_url = f"{url}products.json?page={page}"
products = requests.get(json_url).json()["products"]
for product in products:
product_info = {
"title": product["title"],
"id": product["id"],
"variants": product["variants"],
"images": product["images"],
"options": product["options"]
}
all_products.append(product_info)
return all_products
Using Proxies
Іноді вебсайти блокують запити з тієї самої IP-адреси, якщо за короткий час надіслано забагато запитів. Щоб уникнути цього, можна використовувати проксі. Ось як можна інтегрувати проксі у свої запити:
proxies = {
"http": "http://username:[email protected]",
"https": "http://username:[email protected]"
}
response = requests.get(json_url, proxies=proxies)
Conclusion
Scraping Shopify stores with Python is simple, thanks to the Shopify JSON API. Adding/products.json to a store’s URL allows you to easily access structured product data without the need for complicated HTML parsing. With just a few lines of Python code, you can gather details like product variants, images, and prices, and store them for analysis. To scrape larger stores, you can use techniques like handling pagination and integrating proxies for smoother scraping. Always make sure to follow the store’s terms of service and scrape responsibly.

