Как создать парсер Zalando с помощью Python: пошаговое руководство
TL;DR
Создайте сканер Zalando только для публичных страниц, которые вы имеете право собирать, и проверьте текущие условия сайта и политику роботов перед его запуском.
Начните с одного URL продукта и извлеките встроенные структурированные данные перед добавлением автоматизации браузера.
Используйте Playwright только если требуемые поля появляются после выполнения JavaScript; обычный HTTP быстрее, когда первоначальный ответ уже содержит их.
Храните стабильные идентификаторы продуктов, канонические URL, валюту, доступность, время получения и хеш контента, чтобы обновления были идемпотентными.
Обрабатывайте страницы согласия, перенаправления по региону, отсутствующие варианты и ответы с отказом доступа как явные терминальные состояния.
Что такое сканер Zalando и зачем он вам нужен?
Сканер Zalando — это управляемая программа, которая считывает разрешенные публичные страницы продуктов и преобразует выбранные поля в последовательную запись. Nstdata Crawl может служить управляемым вариантом приобретения, когда команде не хочется самостоятельно управлять браузерами и маршрутизацией, в то время как библиотеки Python обеспечивают более прямой контроль. Подходящие применения включают внутреннее QA, одобренные исследования каталога и мониторинг продуктов, которые ваша организация имеет право наблюдать.
Цель не в том, чтобы копировать весь витринный магазин. Надежная работа начинается с одобренного инвентаря URL и узкой схемы. Руководство по данным о продуктах электронной торговли объясняет, почему исходные записи и принятые бизнес-записи должны оставаться отдельно.
Что вам нужно перед тем, как начать?
Вам нужен Python 3.11 или новее, изолированная среда, httpx, beautifulsoup4 и Playwright для страниц, которые действительно требуют браузера. Вам также нужно письменное разрешение или документированная законная основа, небольшой набор тестовых URL, политика по региону и валюте, а также схема назначения.
Определите эти поля перед написанием селекторов: product_id, canonical_url, name, brand, currency, price_text, availability, color, size_options, retrieved_at и source_hash. Не собирайте данные о клиентах, учетных записях или данных оформления заказа. Ознакомьтесь с текущими условиями Zalando и файлом robots сайта для точного хоста и региона, к которым вы планируете получить доступ.
Как на самом деле работает страница продукта Zalando?
Страница продукта может сочетать серверный HTML, встроенный JSON и запросы на стороне клиента. Видимый DOM не всегда является наилучшим источником. В первую очередь исследуйте первоначальный ответ и блоки <script type="application/ld+json">, потому что структурированные данные о продукте обычно более стабильны, чем классы представления. Если требуемые данные появляются только после рендеринга, используйте браузер и ждите появления значимого элемента продукта, а не ждите произвольное время.
Подключитесь к правильному прокси
Выберите место расположения и режим сессии, которые подходят вашему рабочему процессу, затем подключитесь через Nstdata.
Метод 1: Извлечение JSON-LD с разрешенной страницы товара
Шаг 1: Получите один URL с ограниченным клиентом
Используйте описательный пользовательский агент, тайм-аут, лимиты перенаправлений и низкую скорость запросов. Целевой URL должен быть из вашего утвержденного запаса.
import os
import httpx
url = os.environ["TARGET_URL"]with httpx.Client(timeout=20, follow_redirects=True)as client: response = client.get(url, headers={"User-Agent":"CatalogQA/1.0 contact@example.com"}) response.raise_for_status() html = response.text
Шаг 2: Парсинг JSON-LD товара
import json
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,"html.parser")products =[]for node in soup.select('script[type="application/ld+json"]'):try: value = json.loads(node.string or"")except json.JSONDecodeError:continue values = value ifisinstance(value,list)else[value] products.extend(x for x in values ifisinstance(x,dict)and x.get("@type")=="Product")ifnot products:raise RuntimeError("Не найдено JSON-LD товара; проверьте ответ перед изменением селекторов")
Шаг 3: Нормализуйте без выдумывания значений
Отображайте только существующие поля. Сохраняйте оригинальную строку цены и валюту, и используйте None для недоступных данных. Никогда не делайте выводы о размере или наличии товара из отсутствующей кнопки.
Метод 2: Отображение страницы с помощью Playwright
Шаг 1: Запустите ограниченный контекст браузера
import os
from playwright.sync_api import sync_playwright
with sync_playwright()as p: browser = p.chromium.launch(headless=True) page = browser.new_page(locale="en-GB", viewport={"width":1440,"height":1000}) page.goto(os.environ["TARGET_URL"], wait_until="domcontentloaded", timeout=30000) page.locator('script[type="application/ld+json"]').first.wait_for(timeout=10000) rendered_html = page.content() browser.close()
Шаг 2: Обнаружение неправильного состояния страницы
Проверьте конечный URL, заголовок страницы, ожидаемый идентификатор товара, локаль и наличие признаков товара. Отклоните страницы только с согласиями, авторизацией, вызовами, и стандартные страницы с ошибками. Официальная документация Playwright на Python является источником для текущей установки и ожидания API.
Шаг 3: Сохраните артефакт проверки
Сохраните скриншот или хэш HTML для сбоев, но примените лимиты хранения. Артефакты проверки должны помочь диагностировать изменение селектора или рендеринга, не становясь неконтролируемой копией страницы.
Метод 3: Используйте API для управляемого краулинга для получения данных
Шаг 1: Держите получение отделенным от парсинга
Используйте Nstdata Crawl, когда управляемое рендеринг, состояние задачи и доставка артефактов более полезны, чем владение браузерными рабочими. Отправляйте только утвержденные публичные URL, запрашивайте наименьший набор форматов и проверяйте успех на уровне тела, а не предполагая, что успешный HTTP-ответ означает, что товар был загружен.
Шаг 2: Подтвердите возвращаемый артефакт
Подтвердите канонический URL, признаки товара, локаль, валюту и полноту содержания перед парсингом. Проверьте текущую модель ценообразования Crawl при оценке стоимости на принятый товар, а не стоимости на отправленный URL.
Шаг 3: Используйте один и тот же слой нормализации
HTTP, Playwright и управляемые методы должны все производить одинаковую внутреннюю исходную запись. Полевые характеристики, специфичные для поставщика, должны находиться в адаптере получения, а не в дальнейших таблицах каталога.
Почему скрапер Zalando возвращает пустые или непоследовательные данные?
Пустые данные обычно означают, что ответ является другим состоянием страницы, поле переместилось в встроенный JSON, локаль была перенаправлена или контент требует рендеринга. Сравните response.url, статус, заголовок, длину тела и сохраненный хэш. Если Playwright находит поле, но HTTP — нет, проверьте авторизованные сетевые запросы перед добавлением дополнительных взаимодействий с браузером.
Неконсистентные цены часто возникают из-за локализации, валюты, акций, членства или контекста варианта. Храните эти измерения с каждым наблюдением. Руководство Nstdata по мониторингу цен показывает, почему нормализованные предложения нуждаются в происхождении и правилах приемки.
Как сделать парсер безопасным и поддерживаемым?
Используйте ограниченную очередь, низкую конкуренцию, повторяйте только временные сбои и останавливайтесь при постоянном отказе. Версионируйте парсер, храните фикстуры для каждого поддерживаемого состояния страницы и предупреждайте о количестве отсутствующих полей, а не безмолвно записывайте нули. Протокол исключения роботов описывает стандартизированные правила для роботов, но соблюдение также требует условий, конфиденциальности, авторских прав и внутреннего обзора.
Заключение
Начните с одной разрешенной страницы продукта и JSON-LD, добавьте Playwright только когда доказательства показывают, что требуемое поле рендерится на клиенте, и держите получение отдельно от нормализации. Валидируйте локализацию, канонический URL и идентичность продукта перед принятием записи. Для более широкой работы с каталогом используйте ограниченное обнаружение URL и чек-лист лучших практик веб-скрапинга. Если маршрутизация через несколько одобренных регионов становится отдельной операционной проблемой, рассмотрите Nstdata Proxy Manager, не связывая логику прокси с схемой продукта.
Опробуйте Nstdata — Начните свою бесплатную пробную версию сегодня
Законодательство зависит от цели, метода, юрисдикции, условий и использования данных. Собирайте только публичные или иным образом авторизованные страницы и получите юридическую консультацию для конкретного проекта.
В: Должен ли скрапер Zalando использовать Beautiful Soup или Playwright?
Используйте Beautiful Soup, когда первоначальный ответ или встроенный JSON содержит необходимые данные; используйте Playwright только тогда, когда необходима рендеринг JavaScript. Это снижает затраты и поверхность ошибок.
В: Почему скрапер видит другой язык или цену?
Локальные редиректы, настройки валюты, география, акции и контекст варианта могут изменить страницу. Храните эти измерения и отклоняйте записи, которые не соответствуют запрашиваемому рынку.
В: Как часто следует обновлять страницы продуктов?
Частота обновления должна следовать бизнес-потребностям, волатильности страниц, разрешениям и загрузке сайта. Используйте историю изменений, чтобы замедлить стабильные продукты и приоритизировать волатильные.
В: Как вы предотвращаете дублирование продуктов?
Используйте стабильный идентификатор продукта плюс рыночные и вариативные измерения, канонизируйте URL консервативно и делайте записи идемпотентными с использованием хешей содержимого.
Страницы, рендерящиеся с помощью JavaScript, требуют метода, который соответствует их пути данных. Этот справочник охватывает извлечение сетевых данных, три подхода браузера и управляемый рендеринг.
Ivy Lin
Sep. 28th 2026
Сканируйте целые сайты одним API-запросом
Преобразуйте любой сайт в Markdown, HTML, JSON, ссылки, PDF и другие форматы без управления инфраструктурой сканирования.