Скрапинг Etsy с помощью Python: поиск, товары, магазины и отзывы

Последнее обновление: July 9, 2026
Скрапинг Etsy с помощью Python: поиск, товары, магазины и отзывы

На Etsy более 100 миллионов активных объявлений, 5,6 миллиона продавцов и примерно 450 миллионов посещений в месяц. Это огромный объем общедоступных данных о ценах, трендах, отзывах и конкурентах — и если вам когда-либо приходилось собирать их вручную, вы знаете, насколько это утомительно.

Однажды я провел выходные, вручную каталогизируя товары конкурентов для проекта по исследованию рынка. Уже на 30-м товаре я начал сомневаться во всех жизненных решениях, которые привели меня к этой таблице. Дело в том, что данные Etsy невероятно ценны для ценового анализа, разработки продуктов, поиска ниш и бенчмаркинга продавцов — но только если вы действительно можете получать их в масштабе. Об этом и рассказывает это руководство: один подробный туториал о том, как скрапить Etsy с помощью Python по всем четырем основным типам страниц (результаты поиска, страницы товаров, страницы магазинов и отзывы), а также честный разбор антибот-защиты Etsy и no-code альтернатива для тех, кто предпочел бы вообще обойтись без скриптов.

Что значит скрапить Etsy с помощью Python?

Веб-скрапинг простыми словами — это когда вы пишете код, который заходит на веб-страницы и автоматически извлекает нужные вам данные: названия товаров, цены, описания, изображения, рейтинги, отзывы, информацию о магазине — и упорядочивает их в структурированный формат вроде таблицы или базы данных.

Python — язык по умолчанию для такой работы. Он дружелюбен к новичкам, у него огромное сообщество и богатая экосистема библиотек для скрапинга: Requests для загрузки страниц, BeautifulSoup для парсинга HTML, Selenium и Playwright для автоматизации браузера, а также pandas для организации и экспорта данных. Python стабильно входит в тройку самых популярных языков в ежегодном опросе разработчиков Stack Overflow, а его библиотеки для скрапинга — одни из самых скачиваемых на PyPI.

Когда вы скрапите Etsy, вы извлекаете данные из HTML (а иногда и из скрытого JSON), который Etsy отдает браузеру. Среди данных, которые можно получить:

  • Названия товаров, цены, описания, изображения и варианты
  • Информацию о продавце/магазине (название, количество продаж, локация, рейтинг)
  • Рейтинги и полный текст отзывов
  • Выдачу поиска, категории и сигналы трендов

Зачем скрапить Etsy? Реальные сценарии, которые дают ROI

Скрапинг Etsy — это не просто техническое упражнение, а конкурентное преимущество. Независимо от того, продавец вы, продакт-менеджер или аналитик данных, структурированные данные Etsy под рукой могут напрямую влиять на прибыль.

etsy_stats_4f1f4d51c3.png

Сценарий использованияЧто вы скрапитеКому это полезноБизнес-эффект
Анализ конкурентных ценРезультаты поиска + цены товаровE-commerce-операции, продавцыДинамическое ценообразование в среднем может увеличить выручку на 5–22%
Поиск ниш и трендовРезультаты поиска, популярные объявленияОснователи, аналитикиРаннее выявление растущих ниш (например, запрос "preppy pajamas" показал рост поиска на +1 112%)
Разработка и улучшение продуктаОтзывы, сведения о товареПродуктовые командыОдин бренд кухонной утвари вернул себе статус #1 Best Seller за 60 дней, используя данные о тональности отзывов
SEO и исследование ключевых словРезультаты поиска, названия/теги товаровМаркетинговые командыОпределение высокочастотных, низкоконкурентных ключевых слов
Бенчмаркинг продавцовСтраницы магазинов, количество продажОтделы продаж, аналитикиСбор квалифицированных лидов по $0.01–0.10 за запись вместо покупки списков
Мониторинг ассортимента и остатковНаличие товараE-commerce-операцииБыстрее реагировать на изменения остатков у конкурентов

Каждый из этих сценариев требует данных с разных типов страниц Etsy — поэтому в этом руководстве мы разбираем все четыре.

Экономия времени: вручную vs. автоматически

  • Ручное исследование Etsy: 30–45 минут на один товар (50–75 часов на 100 товаров)
  • Автоматизированный скрапинг: 100 объявлений за 2–5 минут
  • Скрапинг с ИИ на 30–40% быстрее и дает до 99,5% точности

API Etsy или веб-скрапинг: что выбрать?

Прежде чем написать хотя бы одну строку кода, стоит спросить: использовать официальный API Etsy или скрапить сайт напрямую? Этот вопрос постоянно всплывает на форумах, и ответ зависит от того, какие данные вам нужны.

Что умеет и чего не умеет API Etsy

Etsy предлагает API v3 с аутентификацией OAuth 2.0. Он подходит для доступа к данным вашего собственного магазина — объявлениям, заказам, квитанциям. Но у него есть серьезные ограничения:

  • Данные конкурентов: API в основном ограничен вашим собственным магазином. Вы не можете получить цены, продажи или объявления другого продавца.
  • Отзывы: Нет надежного эндпоинта для массового получения полного текста отзывов.
  • Лимиты запросов: По умолчанию 10 запросов/секунду, 10 000 запросов/день. Порог offset — 12 000 записей.
  • Использование ИИ/ML: Явно отклоняется при проверке приложения.
  • Документация: Жалобы сообщества широко распространены — плохие примеры, устаревшие эндпоинты, медленная поддержка.

Когда веб-скрапинг — лучший путь

Если вам нужна информация о конкурентах, тональность отзывов, анализ между магазинами или данные, которые API не раскрывает, скрапинг — правильный выбор. Компромисс такой: вам придется столкнуться с антибот-защитой Etsy (об этом ниже), а также вложиться в настройку.

Таблица сравнения: API vs. скрапинг vs. no-code

КритерийОфициальный API EtsyВеб-скрапинг на PythonThunderbit (no-code)
Доступ к ценам товаров✅ (ограниченные поля)✅ Полный HTML/JSON-LD✅ ИИ извлекает любое видимое поле
Данные отзывов❌ Недоступны массово✅ Через эндпоинт отзывов/HTML✅ Скрапинг подстраниц
Данные магазинов конкурентов❌ Только собственный магазин✅ Любой публичный магазин✅ Любой публичный магазин
Требуется аутентификация✅ OAuth 2.0⚠️ Cookies для данных авторизованного пользователя⚠️ Браузерный скрапинг для входа
Риск антибот-блокировкиНетВЫСОКИЙ (DataDome)Обрабатывается автоматически (в браузере)
Время на настройкуСреднее (API-ключи, OAuth)Высокое (код + прокси)Около 2 минут

Если вам нужны данные конкурентов, отзывы или анализ между магазинами, API просто этого не покрывает. Это честная картина.

Выберите подход к скрапингу на Python, прежде чем писать код

Вопрос, который я постоянно вижу на Reddit и Stack Overflow: «Что лучше — Requests + BeautifulSoup, Selenium, proxy API или что-то совсем другое?» Правильный ответ зависит от вашего уровня, бюджета и сценария использования.

ПодходЛучше всего дляПорог входаУмеет JS?Антибот-защитаСтоимость
Requests + BeautifulSoupРазработчики, которым нужен полный контрольСреднийВручную (заголовки, прокси)Бесплатно + стоимость прокси
Selenium / PlaywrightСтраницы с большим количеством JS, потоки авторизацииВысокийЧастично (browser fingerprint)Бесплатно + стоимость прокси
Сервисы proxy APIМасштаб + обход антиботовСредний✅ (через API)✅ Встроеноот $49/мес
Thunderbit (no-code)Не разработчики, быстрый сбор данныхОчень низкий✅ (нативно в браузере)✅ (браузерная сессия)Есть бесплатный тариф

Если вам нужен полный контроль и вы уверенно работаете с Python, выбирайте Requests + BeautifulSoup. Если нужна рендеризация JS или авторизация, используйте Selenium. Если вам нужен обход антиботов в масштабе, рассмотрите proxy-сервис. А если вы хотите данные Etsy без написания и поддержки кода, стоит посмотреть на Thunderbit — об этом позже.

Как Etsy защищается: понимание антибот-защиты DataDome

Большинство гайдов по скрапингу советуют просто «использовать прокси» и идти дальше. Для Etsy этого недостаточно. Etsy использует DataDome — одну из самых агрессивных антибот-систем в интернете. Собственный кейс DataDome называет Etsy успешным примером, отмечая, что когда-то скраперы составляли около 1% вычислительных затрат Etsy.

etsy_antibot_5431142c9c.png

Что такое DataDome и как он работает?

DataDome не просто проверяет ваш IP-адрес. Он использует многоуровневый стек обнаружения:

  • TLS fingerprinting (JA3): библиотека Python requests имеет характерную TLS-сигнатуру, которую DataDome может мгновенно распознать.
  • Проверка HTTP-заголовков и протокола: ищет полные и согласованные браузерные заголовки — отсутствующие или перепутанные заголовки вызывают подозрение.
  • JavaScript fingerprinting (протокол Picasso): запускает JS-проверки в браузере, чтобы убедиться, что вы реальный пользователь.
  • Поведенческий ML: анализирует более 35 сигналов на каждый запрос, с более чем 85 000 моделей на сайт.
  • Оценка репутации IP: адреса из дата-центров помечаются почти мгновенно.
  • Проверка cookie: cookie datadome должна присутствовать и быть валидной.

Признаки блокировки и как это проверить

Одна из самых частых ловушек: вы получаете ответ 200 OK, но HTML на самом деле — это страница CAPTCHA, а не нужные вам данные. Другие признаки:

  • ошибки 403 Forbidden
  • бесконечные циклы перенаправлений
  • в теле ответа есть JavaScript-объект dd или HTML slider CAPTCHA

Всегда проверяйте тело ответа, а не только статус-код. Быстрая проверка:

if "captcha" in resp.text.lower() or "datadome" in resp.text.lower():
    print("Заблокировано! Вместо данных получена страница CAPTCHA.")

Заголовки и cookies, которые снижают вероятность обнаружения

Гарантировать отсутствие блокировки нельзя, но реалистичные заголовки и управление cookie значительно помогают:

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/133.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Sec-Ch-Ua": '"Chromium";v="133", "Not-A.Brand";v="99", "Google Chrome";v="133"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Upgrade-Insecure-Requests": "1",
})

Также важно:

  • Сохранять cookies между запросами с помощью requests.Session().
  • Добавлять случайные задержки (2–7 секунд) между запросами.
  • Имитировать цепочку переходов: сначала открыть главную страницу, затем поиск, затем страницы товаров.
  • На больших объемах ротация residential proxy необходима. IP из дата-центров помечаются почти мгновенно.

Эти техники снижают вероятность обнаружения, но не устраняют ее полностью. Для высокообъемного скрапинга вам, скорее всего, понадобится proxy-сервис или браузерный подход.

Настройка Python-среды для скрапинга Etsy

Перед началом:

  • Сложность: средняя
  • Время: примерно 30–60 минут (настройка + первый скрапинг)
  • Что понадобится: Python 3.8+, pip, редактор кода, браузер Chrome (для проверки через DevTools)

Установка зависимостей

Создайте папку проекта, настройте виртуальное окружение и установите нужные библиотеки:

mkdir etsy-scraper && cd etsy-scraper
python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate

pip install requests beautifulsoup4 lxml pandas
  • requests — загружает веб-страницы
  • beautifulsoup4 — парсит HTML
  • lxml — более быстрый HTML-парсер (необязательно, но рекомендуется)
  • pandas — структурирует данные и экспортирует их в CSV/Excel

Если позже понадобится автоматизация браузера (для логина или страниц с большим количеством JS), также установите:

pip install selenium

Поймите структуру страниц Etsy до написания кода

Вот совет, который экономит массу времени: Etsy встраивает структурированные данные о товарах в теги <script type="application/ld+json"> на большинстве страниц. Эти данные JSON-LD уже структурированы — название товара, цена, рейтинг, изображения — так что вам не нужно бороться с хрупкими CSS-селекторами для каждого поля.

Откройте любую страницу товара Etsy, щелкните правой кнопкой, выберите «Просмотреть исходный код страницы» и найдите application/ld+json. Вы увидите блок с @type: Product, содержащий большую часть нужных вам данных. На страницах поиска есть @type: ItemList.

CSS-селекторы по-прежнему полезны как запасной вариант для данных, которых нет в JSON-LD, например сведений о доставке или текста отзывов, но первым делом стоит смотреть именно туда.

Шаг 1: Скрапинг результатов поиска Etsy с помощью Python

Результаты поиска — отправная точка для большинства проектов по скрапингу Etsy: будь то мониторинг ниши, отслеживание цен конкурентов или создание базы товаров.

Соберите URL поиска

URL поиска Etsy выглядит так:

https://www.etsy.com/search?q={keyword}&ref=pagination&page={page_number}

Для многословных запросов кодируйте пробелы в URL (например, handmade+jewelry или handmade%20jewelry). Параметр ref=pagination делает запрос более похожим на реальный переход в браузере.

Дополнительные полезные параметры: order (most_relevant, price_asc, price_desc, date_desc), min_price, max_price, ship_to, free_shipping=true. Каждая страница возвращает 48 товаров.

Отправьте запрос и распарсьте HTML

import requests
from bs4 import BeautifulSoup
import json
import time
import random

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

def scrape_etsy_search(query, max_pages=3):
    all_products = []
    for page in range(1, max_pages + 1):
        url = f"https://www.etsy.com/search?q={query}&ref=pagination&page={page}"
        resp = requests.get(url, headers=headers, timeout=30)
        if "captcha" in resp.text.lower():
            print(f"Блокировка на странице {page}. Попробуйте добавить задержки или прокси.")
            break
        soup = BeautifulSoup(resp.text, "lxml")
        for script in soup.find_all("script", type="application/ld+json"):
            data = json.loads(script.string)
            if data.get("@type") == "ItemList":
                for item in data.get("itemListElement", []):
                    all_products.append({
                        "name": item.get("name"),
                        "url": item.get("url"),
                        "image": item.get("image"),
                        "price": item.get("offers", {}).get("price"),
                        "currency": item.get("offers", {}).get("priceCurrency"),
                        "position": item.get("position"),
                    })
        time.sleep(random.uniform(2, 5))
    return all_products

Извлечение данных о товарах из JSON-LD

Массив itemListElement дает название каждого товара, URL, изображение, цену и валюту. Если вам также нужны звездный рейтинг или число результатов (они не всегда есть в JSON-LD), используйте CSS-селекторы:

  • Карточка товара: .v2-listing-card
  • Название: h3.v2-listing-card__title
  • Цена: span.currency-value
  • Ссылка: a.listing-link (href)

Обработка пагинации

Идите по страницам циклом и добавляйте случайную задержку между каждым запросом. Обычно Etsy возвращает до 20–250 страниц в зависимости от запроса.

results = scrape_etsy_search("handmade+jewelry", max_pages=5)
print(f"Скраплено {len(results)} товаров.")

Для скрапинга 5 страниц у меня это заняло около 20 секунд в тесте — вместо более чем 30 минут ручного копипаста.

Шаг 2: Скрапинг страниц товаров Etsy с помощью Python

Когда у вас уже есть список URL товаров из поиска, следующий шаг — извлечь подробные данные со страницы каждого товара.

Получите страницу товара

def scrape_etsy_product(url):
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "Product":
            offers = data.get("offers", {})
            price = offers.get("price") or offers.get("lowPrice")
            rating_data = data.get("aggregateRating", {})
            return {
                "name": data.get("name"),
                "description": data.get("description", "")[:500],
                "brand": data.get("brand", {}).get("name") if isinstance(data.get("brand"), dict) else data.get("brand"),
                "category": data.get("category"),
                "price": price,
                "currency": offers.get("priceCurrency"),
                "availability": offers.get("availability"),
                "rating": rating_data.get("ratingValue"),
                "review_count": rating_data.get("reviewCount"),
                "images": data.get("image", []),
                "sku": data.get("sku"),
                "material": data.get("material"),
            }
    return None

Обработка вариантов цены

У некоторых товаров есть одна offers.price. У других, с вариантами вроде размера или цвета, используются offers.lowPrice и offers.highPrice. Код выше учитывает оба случая, переходя от price к lowPrice.

Дополнительные поля через CSS-селекторы

Для данных, которых нет в JSON-LD — информации о доставке, вариантах, полных сведениях о продавце — понадобятся CSS-селекторы:

  • Название: h1[data-buy-box-listing-title]
  • Варианты: select[data-selector-id] или div[data-option-set]
  • Доставка: div.wt-text-caption рядом с блоком доставки

Компромисс такой: JSON-LD чище и стабильнее при изменениях интерфейса. CSS-селекторы более хрупкие, но дают доступ к большему числу полей.

Шаг 3: Скрапинг страниц магазинов Etsy с помощью Python

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

Соберите URL магазина и получите страницу

def scrape_etsy_shop(shop_name):
    url = f"https://www.etsy.com/shop/{shop_name}"
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")

    # Метаданные магазина из HTML (не из JSON-LD)
    sales_el = soup.select_one("div.shop-sales-reviews a")
    rating_el = soup.find("input", {"name": "initial-rating"})
    location_el = soup.select_one("div.shop-location")

    shop_data = {
        "name": shop_name,
        "sales": sales_el.text.strip() if sales_el else None,
        "rating": rating_el["value"] if rating_el else None,
        "location": location_el.text.strip() if location_el else None,
    }

    # Объявления из JSON-LD
    listings = []
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "ItemList":
            for item in data.get("itemListElement", []):
                listings.append({
                    "name": item.get("name"),
                    "url": item.get("url"),
                    "price": item.get("offers", {}).get("price"),
                })
    shop_data["listings"] = listings
    return shop_data

Что можно извлечь со страниц магазинов

JSON-LD на страницах магазинов — это @type: ItemList, и он покрывает карточки товаров, но не метаданные уровня магазина, такие как количество продаж, локация или рейтинг. Для этого нужны CSS-селекторы:

ПоказательСелекторПримечания
Название магазинаh1 или meta titleОбычно в заголовке страницы
Общее число продажdiv.shop-sales-reviews aТекст вроде «12 345 продаж»
Звездный рейтингзначение input[name="initial-rating"]Число от 1 до 5
Локацияdiv.shop-locationГород, страна
На сайте сdiv.shop-infoТекст с датой

Данные о магазине особенно ценны для составления списков лидов, сравнения с конкурентами и выявления топ-продавцов в нише.

Шаг 4: Скрапинг отзывов Etsy с помощью Python

Отзывы — одни из самых ценных и одновременно самых сложных данных на Etsy. Полный текст отзывов, рейтинги и даты не находятся в начальном HTML страницы; они загружаются через внутренний API-эндпоинт.

Способ 1: Найти внутренний API отзывов Etsy

Откройте страницу товара в Chrome, откройте DevTools (F12), перейдите на вкладку Network и прокрутите до секции отзывов. Вы увидите POST-запрос примерно к такому адресу:

https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews

Этот эндпоинт возвращает HTML-фрагменты с карточками отзывов. Чтобы использовать его, нужны:

  • listing_id — числовой ID из URL товара
  • shop_id — извлекается из HTML страницы товара с помощью regex
  • csrf_nonce — извлекается из тега <meta> на странице

Извлечение ID и CSRF-токена

import re

def get_review_params(product_url):
    resp = requests.get(product_url, headers=headers)
    html = resp.text
    listing_id = product_url.split("/")[-1].split("?")[0]
    shop_id_match = re.search(r'"shopId"\s*:\s*(\d+)', html)
    shop_id = shop_id_match.group(1) if shop_id_match else None
    soup = BeautifulSoup(html, "lxml")
    csrf_meta = soup.find("meta", {"name": "csrf_nonce"})
    csrf = csrf_meta["content"] if csrf_meta else None
    return listing_id, shop_id, csrf

Скрапинг отзывов с пагинацией

def scrape_reviews(listing_id, shop_id, csrf, max_pages=5):
    session = requests.Session()
    session.headers.update(headers)
    all_reviews = []
    for page in range(1, max_pages + 1):
        payload = {
            "specs": {
                "deep_dive_reviews": {
                    "module_path": "neu/specs/deep_dive_reviews",
                    "listing_id": listing_id,
                    "shop_id": shop_id,
                    "page": page,
                }
            }
        }
        resp = session.post(
            "https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews",
            json=payload,
            headers={"x-csrf-token": csrf, "Content-Type": "application/json"},
        )
        data = resp.json()
        html_fragment = data.get("output", {}).get("deep_dive_reviews", "")
        review_soup = BeautifulSoup(html_fragment, "lxml")
        for card in review_soup.select("div.review-card"):
            rating_el = card.find("input", {"name": "rating"})
            text_el = card.select_one("div.wt-text-body")
            user_el = card.select_one("a[data-review-username]")
            date_el = card.select_one("p.wt-text-body-small")
            all_reviews.append({
                "rating": rating_el["value"] if rating_el else None,
                "text": text_el.text.strip() if text_el else None,
                "reviewer": user_el.text.strip() if user_el else None,
                "date": date_el.text.strip() if date_el else None,
            })
        time.sleep(random.uniform(2, 5))
    return all_reviews

Способ 2: Парсинг отзывов из HTML (запасной вариант)

Если API-способ не сработает, например из-за проблем с CSRF-токеном, можно распарсить первую страницу отзывов прямо из HTML страницы товара. Ограничение такое: в статическом HTML находится только начальный набор отзывов. Для большего объема нужен API или браузерный инструмент вроде Selenium.

Как обойти данные, требующие входа: скрапинг своего магазина Etsy

Это пробел, который не закрывает ни один другой туториал, но это реальная задача — особенно для продавцов Etsy, которым нужно извлекать свои заказы, выручку и статистику.

Проблема в том, что requests сам по себе не может получить доступ к панели Etsy, потому что не имеет cookie вашей авторизованной сессии.

Вариант 1: Selenium с ручным входом и сохранением cookies

Используйте Selenium, чтобы открыть браузер, войти вручную (или автоматизировать логин), а затем продолжить скрапинг уже в авторизованной сессии:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.etsy.com/signin")
# Войдите вручную в окне браузера, затем:
input("Нажмите Enter после входа...")

cookies = driver.get_cookies()
# Теперь используйте driver.get() для перехода по страницам панели и скрапинга

Вы также можете сохранить cookie из сессии Selenium и повторно использовать их с requests.Session() для более быстрого и легкого скрапинга после первого входа.

Вариант 2: Экспорт cookie браузера для использования с Requests

Используйте расширение браузера (например, "EditThisCookie"), чтобы экспортировать cookie активной сессии Etsy, а затем загрузите их в сессию Requests:

import requests

session = requests.Session()
# Добавьте cookies, экспортированные из браузера
session.cookies.set("uaid", "YOUR_UAID_VALUE", domain=".etsy.com")
session.cookies.set("user_prefs", "YOUR_USER_PREFS_VALUE", domain=".etsy.com")
# ... добавьте другие cookies сессии по необходимости

resp = session.get("https://www.etsy.com/your/orders", headers=headers)

Простой путь: режим браузерного скрапинга Thunderbit

Поскольку Thunderbit работает внутри вашего браузера Chrome, он автоматически наследует вашу активную сессию Etsy. Никакого кода для аутентификации, никакого экспорта cookie — просто откройте панель Etsy и скрапьте. Это действительно удобно для извлечения заказов, выручки, статистики и других данных, доступных только продавцу, без единой строки скрипта.

Скрапить панель Etsy с помощью ИИ

Экспорт и использование собранных данных Etsy

Сохранение в CSV или JSON

import pandas as pd

df = pd.DataFrame(results)
df.to_csv("etsy_products.csv", index=False, encoding="utf-8")
df.to_json("etsy_products.json", orient="records", indent=2)

Лучшие практики: добавляйте временные метки в имена файлов, используйте кодировку UTF-8 и корректно обрабатывайте спецсимволы в названиях товаров (продавцы Etsy любят эмодзи и диакритические знаки).

Экспорт в Google Sheets, Airtable или Notion

Для пользователей Python библиотеки вроде gspread (Google Sheets) или Airtable API позволяют отправлять данные программно. Но если вы используете Thunderbit, все экспорты — в Google Sheets, Excel, Airtable и Notion — бесплатны и выполняются в один клик. Без API-ключей, без настройки OAuth.

Обойдитесь без кода: как скрапить Etsy с помощью Thunderbit (no-code альтернатива)

Не все хотят писать Python-скрипты, поддерживать конфигурации прокси или отлаживать CSS-селекторы в 2 часа ночи. Если это про вас, вот как получить данные Etsy с помощью Thunderbit.

Установите расширение Thunderbit для Chrome

Перейдите в Chrome Web Store и установите Thunderbit. Создайте бесплатный аккаунт — бесплатный тариф дает 6 страниц в месяц, а все экспорты бесплатны.

Используйте AI Suggest Fields на любой странице Etsy

Откройте страницу поиска, товара или магазина Etsy. Нажмите «AI Suggest Fields» в боковой панели Thunderbit. ИИ просканирует страницу и предложит столбцы — название товара, цена, рейтинг, изображения, название магазина, теги, информацию о доставке. При необходимости можно изменить или добавить столбцы.

Нажмите Scrape и экспортируйте

Нажмите «Scrape», чтобы извлечь данные с текущей страницы. Для многостраничных результатов используйте пагинационный скрапинг Thunderbit. Чтобы обогатить список URL товаров деталями с каждой страницы товара (описания, отзывы, доставка), используйте скрапинг подстраниц — Thunderbit автоматически переходит по каждой ссылке и подтягивает дополнительные данные.

Экспорт в Excel, Google Sheets, Airtable или Notion — бесплатно.

Когда Thunderbit лучше Python для скрапинга Etsy

  • Не нужна настройка прокси или код антибота. Thunderbit работает в вашем настоящем Chrome-браузере, поэтому наследует вашу сессию и выглядит для DataDome как обычный пользователь.
  • ИИ автоматически подстраивается под изменения интерфейса. Не нужно чинить сломанные селекторы после обновления фронтенда Etsy.
  • Отлично подходит для разовых исследований, конкурентного анализа или нетехнических членов команды. Если вам нужен просто быстрый набор данных, Python-среда не обязательна.
  • Скрапинг подстраниц позволяет обогащать список URL товаров подробными данными без написания вложенных циклов.

Для пошагового разбора посмотрите YouTube-канал Thunderbit.

Сравнение затрат на 6 месяцев: Python vs. Thunderbit

ФакторPython своими силамиThunderbit
Время на настройку8–20 часовМенее 5 минут
Стоимость за 6 месяцев (включая труд и прокси)$2 720–9 450$90–228
Ежемесячная поддержка4–10+ часов (обновления селекторов = 80%+ накладных расходов)0–1 час
Антибот-защитаResidential proxy по цене в 85 раз выше обычного кредитаБраузерный подход, нативно обходит DataDome
Качество данныхВысокое (при затратах усилий)Высокое (на базе ИИ)

Я не говорю, что Python — неправильный выбор: если вам нужен полный контроль, кастомная логика или интеграция в более крупный пайплайн, код по-прежнему король. Но для большинства бизнес-пользователей, которым просто нужны данные Etsy, математика ROI склоняется в сторону no-code-инструмента.

Юридические и этические советы по скрапингу Etsy

Меня спрашивают о законности в каждом посте о скрапинге, так что вот краткая версия:

  • Условия использования Etsy прямо запрещают автоматический доступ. При этом Etsy в основном опирается на техническое принуждение (DataDome), а не на судебные иски — известных судебных дел против скраперов, связанных именно с Etsy, нет.
  • Скрапьте только общедоступные данные. Не обходите аутентификацию и не заходите в приватные панели продавцов, которые вам не принадлежат.
  • Используйте разумную частоту запросов. Задержки 2–7 секунд между запросами и никакого «долбления» серверов Etsy.
  • Соблюдайте robots.txt. Etsy разрешает страницы поиска, но ограничивает некоторые пути.
  • Ответственно обращайтесь с персональными данными в соответствии с законами о конфиденциальности, например GDPR.
  • Проконсультируйтесь с юристом для коммерческих проектов по скрапингу в больших масштабах.

Больше информации вы найдете в нашей статье о юридических последствиях веб-скрапинга — включая дело Meta v. Bright Data (2024), где скрапинг общедоступных данных был признан допустимым.

Итоги: ключевые выводы

Мы рассмотрели очень многое. Вот что я хочу, чтобы вы вынесли из этого материала:

  • Структурированные данные JSON-LD на Etsy обычно извлекать проще, чем парсить сырой HTML.
  • DataDome — реальное препятствие: для скрапинга на Python в масштабе нужны правильные заголовки, задержки, управление cookie и residential proxies.
  • API Etsy ограничен. Если вам нужны отзывы, магазины конкурентов или анализ между продавцами, практичнее скрапить сайт.
  • Thunderbit предлагает no-code альтернатива, которая нативно справляется с антибот-защитой и аутентификацией — стоит попробовать, если вы хотите данные Etsy без поддержки скриптов.
  • Всегда скрапьте ответственно и соблюдайте правила Etsy.

Если хотите начать без написания кода, попробуйте Thunderbit бесплатно. Или используйте Python-код из этого руководства, чтобы собрать собственный скрейпер — и пусть ваши селекторы никогда не ломаются в пятницу днем.

Больше гайдов по скрапингу — в нашем руководстве по Etsy scraper и подборке лучших AI web scraper.

Попробуйте Thunderbit, чтобы быстрее скрапить данные Etsy Get Started Free

Часто задаваемые вопросы

1. Законно ли скрапить Etsy с помощью Python?

Скрапинг общедоступных данных в целом допускается в соответствии с недавними судебными прецедентами (например, Meta v. Bright Data, hiQ v. LinkedIn). Однако Условия использования Etsy запрещают автоматический доступ, поэтому перед скрапингом всегда изучайте их ToS и robots.txt. Для крупномасштабного или коммерческого использования проконсультируйтесь с юристом.

2. Можно ли скрапить Etsy без блокировок?

Etsy использует DataDome — одну из самых жестких антибот-систем. Реалистичные заголовки, задержки между запросами, сохранение cookie и ротация residential proxy помогают снизить число блокировок. Браузерный подход Thunderbit избегает большинства детектов, поскольку работает в вашей реальной сессии Chrome.

3. Есть ли у Etsy API, который можно использовать вместо скрапинга?

Да — у Etsy есть API v3, но он в основном ограничен данными вашего собственного магазина и не дает полноценного доступа к отзывам. Для большинства сценариев конкурентной разведки и анализа между магазинами требуется именно скрапинг.

4. Какие библиотеки Python нужны для скрапинга Etsy?

Минимум: requests, beautifulsoup4, pandas для экспорта и json (встроен в Python). Для страниц с большим количеством JS или с обязательным логином добавьте selenium. Для более быстрого парсинга HTML используйте lxml.

5. Как именно скрапить отзывы Etsy?

Отзывы Etsy загружаются через внутренний API-эндпоинт (/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews). Нужно извлечь listing ID, shop ID и CSRF-токен со страницы товара, а затем отправлять POST-запросы к этому эндпоинту с пагинацией. В качестве запасного варианта можно распарсить первую порцию отзывов прямо из HTML страницы товара — оба подхода пошагово разобраны в этом руководстве.

Подробнее

Shuai Guan
Shuai Guan
Генеральный директор Thunderbit | Эксперт по автоматизации данных с помощью ИИ Shuai Guan — генеральный директор Thunderbit и выпускник инженерного факультета Мичиганского университета. Опираясь почти на десятилетний опыт в сфере технологий и SaaS-архитектуры, он специализируется на том, чтобы превращать сложные модели ИИ в практичные no-code инструменты для извлечения данных. В этом блоге он делится честными, проверенными в деле инсайтами о веб-скрейпинге и стратегиях автоматизации, чтобы помочь вам выстраивать более умные, data-driven рабочие процессы. Когда он не занимается оптимизацией потоков данных, тот же внимательный подход к деталям он переносит в своё увлечение фотографией.
Содержание

Собирай страницу, просто задав вопрос

Скажи, что тебе нужно, простыми словами. А ещё лучше — ничего не говори.

Попробовать Thunderbit бесплатно
Извлекай данные с помощью ИИ
Легко передавай данные в Google Sheets, Airtable или Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week