перейти к содержанию

Как очистить Goat.com для получения ценных данных о моде с помощью Python

Привет! Goat.com стал одной из самых популярных онлайн-площадок по перепродаже элитных модных товаров. В этом посте я покажу вам, как масштабно использовать данные Goat, создав веб-скребок с помощью Python.

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

Эти данные могут стать кладезем информации для развития вашего модного бизнеса!

Давайте поскребём!

Почему вам обязательно следует поцарапать козу

Вот несколько убедительных причин для очистки данных от Goat, которые я обнаружил за годы работы в качестве специалиста по обработке данных:

Мониторинг цен – Отслеживайте цены на определенные товары или бренды с течением времени. Вы можете оптимизировать свою ценовую стратегию и определить идеальную прибыль.

Например, StockX сообщает, что средняя цена перепродажи заветных Air Jordan 1 Retro High Dior в 7500 году составит 2022 долларов, что на 46% больше, чем в 2020 году!

Прогнозирование спроса – Анализируйте историческую скорость продукта на Goat, чтобы спрогнозировать будущий спрос по стилю. Очень ценен для планирования покупок инвентаря.

Данные Goat показывают, что adidas Yeezy Boost 350 v2 в настоящее время является самым продаваемым стилем кроссовок, продвигаясь в среднем всего за 1 дня!

Пытливый ум – Отслеживайте запасы конкурентов на Goat по различным продуктам. Используйте эту информацию для сравнения своего ассортимента и выявления возможностей пустого пространства.

Анализ рынка – Определить потенциал рынка перепродажи для различных сегментов продукции путем анализа исторических данных о продажах и ценах. Откройте для себя области с самыми сочными краями.

По данным Cowen Equity Research, к 30 году рынок онлайн-перепродажи одних только кроссовок достигнет 2030 миллиардов долларов!

Разработка продукта – Откройте для себя новые тенденции в стилях, материалах, коллаборациях и многом другом, просматривая обширный каталог Goat. Примените эти идеи для своих собственных проектов.

Оповещения об инвентаре – Получайте уведомления, как только редкие Граали или предметы из вашего списка желаний станут доступны на Goat. Крайне важно, если вы хотите приобрести ограниченное количество товаров.

Наука данных – Создавайте огромные наборы данных для обучения моделей машинного обучения – от прогнозирования спроса до классификаторов изображений для вашего онлайн-каталога.

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

Хорошо, теперь, когда ты знаешь зачем - давайте займемся КАК поцарапать Козу с помощью Python!

Шаг 1 – Подготовка к очистке козла

Прежде чем мы начнем программировать, нам необходимо убедиться, что у нас есть подходящие инструменты для работы.

Вот основные предпосылки:

Python 3 – Мы будем использовать Python 3, в идеале — последнюю стабильную версию 3.10 на момент написания этой статьи.

модуль запросов – Этот блестящий модуль позволяет нам отправлять HTTP-запросы на Python для загрузки веб-страниц.

lxml-модуль – Для быстрого и эффективного анализа HTML-страниц, чтобы мы могли извлечь нужные данные.

CSV-модуль – Чтобы сохранить наш очищенный набор данных в виде файла CSV для удобного анализа в дальнейшем.

Мы можем установить эти модули с помощью pip, менеджера пакетов Python:

pip install requests lxml csv

Я также рекомендую настроить виртуальная среда для вашего парсера, чтобы избежать конфликтов с системными пакетами.

Освоив основы, приступим к скрапингу!

Парсинг одной страницы продукта на Goat

Сначала мы сосредоточимся на сборе данных со страницы одного продукта на Goat.

Давайте воспользуемся кроссовками Air Jordan 1 Retro High в качестве примера:

https://www.goat.com/sneakers/air-jordan-1-retro-high-og-bio-hack-555088-711

Просматривая исходный код страницы, вы можете увидеть, какие данные о продукте мы хотим разместить в элементах HTML, например:

<h1 itemprop="name">Air Jordan 1 Retro High OG Bio Hack</h1>

<div itemprop="description">
  Jordan Brand officially unveiled its newest women‘s exclusive Air Jordan 1 High OG style, the "Bio Hack." The eye-catching color scheme features a mix of pink, purple, green and black shades throughout the leather upper, borrowing aesthetic cues from vintage video games.
</div>

Чтобы извлечь его, мы:

  1. Загрузите HTML-страницу
  2. Проанализируйте его, чтобы найти элементы данных.
  3. Извлеките текст и атрибуты элемента

Посмотрим на это в скребке:

import requests
from lxml import html 

product_url = ‘https://www.goat.com/sneakers/air-jordan-1-retro-high-og-bio-hack-555088-711‘

page = requests.get(product_url)
tree = html.fromstring(page.content)

title = tree.xpath(‘//h1[@itemprop="name"]/text()‘)[0]
description = tree.xpath(‘//div[@itemprop="description"]/text()‘)[0]

print(title)
print(description)

Мы тут:

  • Используйте requests скачать содержимое страницы
  • Передайте это lxml анализировать как структурированный HTML
  • Запрос элементов с использованием синтаксиса XPath
  • Индексируйте результаты, чтобы извлечь текст

Это печатает:

Air Jordan 1 Retro High OG Bio Hack

Jordan Brand officially unveiled its newest women‘s exclusive Air Jordan 1 High OG style, the "Bio Hack." The eye-catching color scheme features a mix of pink, purple, green and black shades throughout the leather upper, borrowing aesthetic cues from vintage video games.

Сладкий! С помощью нескольких простых строк Python мы выделили основные поля продукта.

Некоторые другие данные, которые вы можете получить:

  • Цена - //meta[@itemprop="price"]/@content
  • Бренд - //meta[@itemprop="brand"]/@content
  • URL изображения - //meta[@property="og:image"]/@content
  • Артикул - //span[@itemprop="sku"]/text()

Таким образом вы можете получить десятки элементов на странице.

Теперь давайте рассмотрим некоторые ключевые моменты при парсинге страниц товаров:

Обработка динамического контента – Если данные загружаются динамически через JavaScript, вы не увидите их в исходном коде страницы. Рассмотрите возможность использования Selenium или таких инструментов, как ScrapeOps для рендеринга страниц.

Анализ дат – Используйте Python datetime модуль для анализа дат из строк, таких как даты выпуска.

Извлечение текста – При захвате текста позвоните .strip() чтобы удалить лишние пробелы и новые строки.

Разделы CDATA - использовать lxml«s tostring() функция для извлечения текстовых сегментов CDATA.

Атрибут против текста – Решите, хотите ли вы извлечь значения атрибутов элемента или текст для вашего варианта использования.

Обработка ошибок – Заверните экстракцию в try/except блоки на случай отсутствия элементов на некоторых страницах.

С помощью этих советов и lxmlМощный движок XPath позволяет надежно анализировать даже сложные страницы товаров.

Далее давайте повысим уровень…

Парсинг результатов поиска и нумерация страниц

Теперь, когда мы можем парсить отдельные продукты, пришло время массового получения данных!

Мы создадим парсер, который:

  1. Отправляет поисковые запросы на сайт Goat.
  2. Извлекает все продукты из результатов с разбивкой на страницы.
  3. Обрабатывает нумерацию страниц при проходе по страницам
  4. Сохраняет очищенные данные в CSV.

Это позволит нам извлекать сотни или даже тысячи продуктов на основе поисковых фильтров.

Вот как это работает:

import csv
from urllib.parse import urlencode

import requests
from lxml import html

BASE_URL = ‘https://www.goat.com/search‘

def scrape_products(query, pages=5):

  with open(‘products.csv‘, ‘w‘) as f:
    writer = csv.writer(f)  

    writer.writerow([‘title‘, ‘url‘, ‘price‘])

    page = 1

    while page <= pages:

      params = {
        ‘query‘: query,
        ‘page‘: page        
      }

      q = urlencode(params)
      url = f‘{BASE_URL}?{q}‘

      print(f‘Scraping page {page}‘)

      r = requests.get(url)
      tree = html.fromstring(r.content)

      products = tree.xpath(‘//a[contains(@class, "product-link")]‘)

      for product in products:
        title = product.xpath(‘.//div[@class="product-name"]/text()‘)[0]
        url = product.xpath(‘./@href‘)[0]
        try:
          price = product.xpath(‘.//div[@class="product-price"]/text()‘)[0].replace(‘$‘,‘‘)
        except:
          price = None

        writer.writerow([title, url, price])

      page += 1

scrape_products(‘jordan‘, pages=2)      

Вот как это работает шаг за шагом:

  • Мы определяем scrape_products() функция, которая принимает поисковый запрос и максимальное количество страниц для парсинга

  • Внутри открываем CSV-файл для записи и инициализируем счетчик страниц.

  • В цикле мы создаем URL-адрес поиска с помощью query и page PARAMS

  • Мы ПОЛУЧАЕМ HTML-код страницы и используем XPath для поиска всех продуктов.

  • Для каждого продукта мы извлекаем ключевые поля, такие как заголовок, URL-адрес и цена.

  • Они записываются в CSV в виде строк.

  • Наконец, мы увеличиваем счетчик страниц, чтобы перейти к следующей странице.

Мы используем try/except при извлечении цены для устранения любых ошибок.

Ключом является параметр страницы, который позволяет нам перемещаться по страницам, пока не будут очищены все результаты!

Настраивая запрос, вы можете создавать наборы данных о продуктах по любому аспекту — бренду, полу, типу, дате выпуска и многому другому!

Сохранение изображений и медиафайлов

Помимо данных о продуктах, вы также можете загрузить изображения продуктов из CDN Goat.

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

Чтобы загрузить изображения, возьмите URL-адреса изображений продуктов, а затем:

import os
import requests 

product_img_url = ‘https://image.goat.com/attachments/...png‘ 

# Extract filename 
filename = product_img_url.split(‘/‘)[-1]

print(f‘Downloading {filename}‘)

r = requests.get(product_img_url, stream=True) 

with open(filename, ‘wb‘) as f:
  for chunk in r.iter_content(1024): 
    f.write(chunk)

Мы можем использовать аналогичный подход для загрузки любых медиа-ресурсов, связанных с продуктами:

  • Видео трейлеры
  • Модели 3D
  • Руководства по продукту/спецификации

Доступ к этим цифровым активам на местном уровне может оказаться неоценимым!

Теперь давайте переключимся и поговорим о том, как обращаться с блоками…

Ротация прокси, чтобы избежать блокировки

Распространенная ошибка при масштабном парсинге таких платформ, как Goat, блокируется.

Goat использует сложную защиту от ботов и может помечать чрезмерный трафик парсинга как оскорбительный.

Вот несколько советов, как оставаться незамеченными:

Используйте резидентные прокси – IP-адреса центров обработки данных легко обнаружить. Резидентные прокси от таких провайдеров, как Геосерфинг выглядеть как обычный пользовательский трафик.

Ротация разных прокси – Меняйте прокси каждые несколько запросов вместо повторного использования одного и того же IP. Ротацию прокси легко реализовать в Python.

Ограничить частоту запросов – Добавьте задержки по 5-10 секунд между запросами. Установка разумного ритма помогает распределить нагрузку.

Рандомизировать задержки – Меняйте время ожидания между запросами вместо использования фиксированных интервалов. Это имитирует человеческие модели.

from time import sleep
from random import randint

sleep(randint(5,10)) # random delay between 5-10 seconds  

Следите за ошибками 429 или 503. – Эти коды состояния указывают, что вы временно заблокированы. Пауза при их появлении позволяет осуществлять ротацию IP-адресов.

Используйте службы прокси-менеджера - Инструменты, такие как БрайтДата управлять циклическим прокси-сервером и предоставлять чистые резидентные IP-адреса «из коробки».

При правильной настройке прокси-сервера вы сможете успешно извлекать огромные наборы данных из Goat!

Другие полезные методы парсинга

Вот несколько дополнительных советов из моего набора инструментов для очистки:

  • Просмотрите файл robots.txt Goat, чтобы выявить любые ограниченные действия по очистке данных.

  • Прежде чем запускать парсеры, проверяйте наличие обновлений в структурах страниц, поскольку сайты часто меняются.

  • Сохраняйте очищенные данные постепенно, а не повторно запрашивая их, но также проверяйте наличие обновлений.

  • Очищайте данные выборочно, а не загружайте ненужную информацию

  • Используйте карты сайта и внутренний поиск, чтобы найти больше страниц продуктов для индексации при желании.

  • Вежливо сканируйте в непиковые часы, чтобы минимизировать нагрузку на сервер.

  • Рассмотрите возможность использования безголовых браузеров, таких как Selenium, если страницы очень динамичны.

  • Контейнеризируйте парсеры в Docker для упрощения масштабирования, развертывания и использования в команде.

Эти методы гарантируют, что очистка Goat принесет максимальную пользу с минимальными усилиями!

Подводя итог

Уф, это было настоящее путешествие!

В этом посте вы узнали множество методов создания надежных парсеров Goat на Python:

  • Извлечение данных о продукте с отдельных страниц с помощью requests и lxml

  • Масштабирование до очистки результатов поиска с использованием нумерации страниц

  • Загрузка изображений и медиа-ресурсов

  • Как избежать блокировок с помощью резидентных прокси и других лучших практик

Полученные вами знания помогут вам воспользоваться золотой жилой информации о продуктах в каталогах Goat.

Теперь вы готовы пополнить свой набор продавцов модной одежды и получить серьезные преимущества от платформы Goat.

Мне понравилось, что ты был с нами в поездке! Парсинг может быть сложной задачей, но в то же время невероятно полезным, когда вы видите, что приходят миллионы строк проанализированных данных.

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

Удачного соскабливания!

Теги:

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *