Как собирать данные о магазинах и товарах на Etsy (теги, цены, рейтинги)
Etsy скрывает чистые, структурированные данные в JSON-блоке на каждой странице товара - имя, цена, рейтинги, теги. Разбирайте их, а не боритесь с HTML, и извлекайте эти теги для исследования ключевых слов, за которые ваши конкуренты платят.
Etsy - это золотая жила для исследования товаров и ключевых слов - миллионы активных объявлений, каждое из которых помечено и оценено реальными покупателями. Загвоздка в том, что официальный Open API v3 ограничивает вас примерно 10,000 запросами в день и 10 в секунду, а интересные конечные точки защищены OAuth. Для исследования конкурентов и рынка в реальном масштабе вам придется собирать данные с публичных страниц. Хорошая новость: Etsy предоставляет чистые, структурированные данные, если вы знаете, где искать. Это руководство показывает надежный способ собирать данные о магазинах и товарах на Etsy - цена, рейтинги и теги - без борьбы с HTML.
Надежный трюк: разбирайте ld+json, а не HTML
Каждая страница товара на Etsy встраивает блок <script type="application/ld+json">: данные schema.org Product с заголовком, SKU, ценой, валютой и aggregateRating, содержащим звездную оценку и количество отзывов. Разбор этого JSON намного стабильнее, чем погоня за CSS-классами, которые Etsy меняет. Загрузите страницу через прокси, извлеките блок, и у вас будет чистая запись за несколько строк:
import json, requests
from bs4 import BeautifulSoup
proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}
def scrape_listing(url):
r = requests.get(url, proxies=proxies, timeout=20)
soup = BeautifulSoup(r.text, "html.parser")
blob = soup.find("script", {"type": "application/ld+json"})
data = json.loads(blob.string)
return {
"title": data.get("name"),
"price": data.get("offers", {}).get("price"),
"curr": data.get("offers", {}).get("priceCurrency"),
"rating": data.get("aggregateRating", {}).get("ratingValue"),
"reviews": data.get("aggregateRating", {}).get("reviewCount"),
}
print(scrape_listing("https://www.etsy.com/listing/1234567890/example"))

Поля, которые стоит извлекать - особенно теги
Помимо цены и рейтинга, самый ценный сигнал - это теги. Каждое объявление на Etsy может содержать до 13 тегов, и это именно те фразы, которые продавцы считают, что покупатели ищут. Соберите теги по самым продаваемым объявлениям в категории, и вы воссоздадите карту ключевых слов - те же данные, которые перепродают специализированные SEO-инструменты. Сопоставьте это с количеством отзывов в качестве прокси для спроса, и вы сможете ранжировать категорию по тому, что действительно продается. Добавьте количество избранных объявлений и дату их размещения, если доступно, и вы сможете отличить проверенных продавцов от новых поступлений, следящих за трендом - разница между ключевым словом, которое стоит нацеливать, и тем, которое только кажется популярным. Здесь сбор данных окупается быстрее, чем любой оплачиваемый набор данных. Наше руководство по сбору отзывов о товарах охватывает превращение текста отзывов в сигналы настроений.
Сбор данных с поисковых и магазинных страниц
Поисковые и магазинные страницы ведут себя по-разному. Их ld+json перечисляет только первые восемь элементов, даже если страница отображает десятки, поэтому для обнаружения объявлений разбирайте HTML-карточки, а не JSON. Соберите ссылки на объявления, удалите дубликаты числовых идентификаторов, затем извлеките каждую страницу товара для полной записи. URL поиска на Etsy принимает параметр страницы, так что вы можете проходить результаты в цикле:
import re
def find_listing_ids(query, pages=3):
ids = set()
for page in range(1, pages + 1):
url = f"https://www.etsy.com/search?q={query}&page={page}"
r = requests.get(url, proxies=proxies, timeout=20)
# listing links look like /listing/<id>/<slug>
for m in re.findall(r"/listing/(\d+)/", r.text):
ids.add(m)
return ids
ids = find_listing_ids("ceramic+mug", pages=3)
print(len(ids), "unique listings")
Изображения товаров размещены на CDN i.etsystatic.com и напрямую связаны с разметкой, если вам нужны миниатюры. Для исследования на уровне магазина страница магазина содержит рейтинг продавца, количество продаж и политику - полезно для ранжирования конкурентов по объему.
Получите резидентные IP-адреса, созданные для сбора данных с маркетплейсов
Вариации, пагинация и снижение трафика
Две детали отличают игрушечный скрейпер от того, который работает в масштабе. Во-первых, вариации: многие объявления на Etsy продают несколько вариантов - размеры, цвета, персонализации - каждый со своей ценой. Поле ld+json offers может быть одним объектом или массивом, так что обрабатывайте оба варианта, иначе вы тихо запишите только первую цену и неправильно поймете всю категорию. Во-вторых, пагинация: результаты поиска разбиты на страницы, и Etsy ограничивает, насколько глубоко вы можете пройти по любому запросу. Вместо того чтобы пытаться пройти до конца по широкому термину, разделите категорию на более узкие запросы (по материалу, стилю или ценовому диапазону), чтобы каждый поиск возвращал полный набор. Вы получите лучшее покрытие и меньше сработаете на антибот-проверки, чем один скрейпер, проходящий страницу 40 "подарков".
Трафик - это стоимость, которая подкрадывается при сборе данных с маркетплейсов. Полная страница товара на Etsy загружает много изображений и скриптов, которые вам не нужны, если вы хотите только ld+json. Когда вы извлекаете с помощью обычного HTTP, вы уже пропускаете загрузку изображений - разметка это текст. Оставьте рендеринг JavaScript для тех немногих страниц, которые действительно в нем нуждаются, потому что отрендеренная страница может стоить в несколько раз больше байтов, чем сырая загрузка. Кэшируйте агрессивно: теги и заголовок объявления редко меняются каждый час, поэтому условное обновление лучше, чем повторная загрузка всего. Наше руководство по снижению затрат на трафик прокси охватывает тактики HEAD-проверки и блокировки ресурсов, которые сохраняют счет за гигабайт в разумных пределах.
Преодоление стены CAPTCHA
Etsy проводит антибот-проверки, и безголовый браузер или IP-адрес дата-центра, обращающийся к страницам поиска, быстро вызывает CAPTCHA. Три вещи помогут вам пройти через это. Во-первых, используйте резидентные прокси - реальные IP-адреса, назначенные ISP, воспринимаются как покупатели, а не серверы. Во-вторых, сопоставьте геолокацию с изучаемым рынком; цены и оценки доставки меняются в зависимости от страны. В-третьих, соблюдайте темп - равномерные, похожие на человеческие интервалы лучше, чем всплески. Если вы не хотите управлять рендерингом и повторными попытками, Scraper API справится с отпечатками, ротацией и JavaScript за вас и вернет разобранную страницу, что обычно требует меньше кода, чем поддержание флота безголовых браузеров. Для более широкой картины смотрите наше руководство по автоматизации маркетплейсов на Amazon, eBay и Etsy.
Одна строка об этике: собирайте публичные данные об объявлениях, уважайте Условия использования Etsy и директивы robots, и не собирайте личные контактные данные продавцов - это переходит от исследования рынка к проблеме защиты данных. Это руководство, а не юридическая консультация; проверьте свой собственный случай использования.

Часто задаваемые вопросы
Как собрать данные с Etsy?
Загрузите каждую страницу товара через резидентный прокси и разберите встроенный блок ld+json, который содержит заголовок, цену, валюту и рейтинг в виде чистых данных schema.org. Для обнаружения разберите HTML-карточки страницы поиска, чтобы собрать идентификаторы объявлений, затем извлеките каждую страницу товара. Это более стабильно, чем скрейпинг вращающихся CSS-классов.
Есть ли у Etsy API для скрейпинга?
Официальный Open API v3 Etsy существует, но ограничивает около 10,000 запросов в день и 10 в секунду, и многие конечные точки защищены OAuth. Для исследования конкурентов в масштабе большинство людей собирают данные с публичных страниц, которые часто раскрывают больше, чем возвращает API - включая полный список тегов на каждом объявлении.
Как получить теги Etsy для исследования ключевых слов?
Каждое объявление может содержать до 13 тегов, присутствующих в разметке страницы. Соберите самые продаваемые объявления в категории, соберите их теги и ранжируйте по частоте, чтобы создать карту ключевых слов. Взвешивание по количеству отзывов приближает спрос, давая вам основанную на данных картину того, что продается и что ищут покупатели.
Почему Etsy показывает CAPTCHA, когда я собираю данные?
IP-адрес дата-центра или агрессивный безголовый браузер воспринимается как бот. Используйте резидентные прокси, чтобы запросы выглядели как от реальных покупателей, сопоставьте геолокацию с рынком и соблюдайте темп запросов в человеческих интервалах. Scraper API, который рендерит и вращает за вас, убирает большинство триггеров CAPTCHA без дополнительного кода.
Сбор данных с Etsy в основном заключается в чтении JSON, который он уже предоставляет, и доступе к странице без блокировки. Разбирайте ld+json, извлекайте теги, распределяйте запросы по чистым резидентным IP-адресам, и у вас будет живая лента цен, рейтингов и намерений поиска - сырье для настоящего исследования товаров.