Напоминания Poshmark с помощью Python (Часть 1)
Poshmark - это платформа социальной коммерции, где пользователи могут покупать и перепродавать новую или малоиспользованную одежду. Эта платформа отлично подходит для тех, кто хочет быть в тренде моды, не тратя при этом много денег.
Одна из моих коллег является активным покупателем и продавцом на Poshmark, однако она упомянула, что на Poshmark нет функции сохранения поиска. Предположим, вы ищете определенную марку и стиль джинсов, вам придется каждые несколько дней или каждую неделю искать этот точный параметр поиска, чтобы проверить последние предложения.
В этом руководстве мы создадим скрипт с использованием Python для парсинга наших любимых поисков на Poshmark и отправки регулярных напоминаний о новых предложениях. Руководство разделено на следующие части:
- Часть 1 - Парсинг Poshmark
- Часть 2 - Отправка электронных писем
- Часть 3 - Развертывание и автоматизация
В части 1 мы будем парсить любимый бренд на Poshmark и обрабатывать сырой HTML в удобные данные с помощью Python. В результате мы получим вывод в консоли, подобный следующему:
Полный код доступен в этом репозитории GitHub.
Шаг 0 — Импорт и статические переменные
Если у вас еще нет пакетов Python requests, BeautifulSoup и dateutil.parser, пожалуйста, загрузите их сейчас с помощью pip.
Я создам три константные переменные.
- SEARCH_URL: Представляет поиск Poshmark для недавно размещенных джинсов Naked and Famous
- HEADER: Предоставляет базовый user-agent, чтобы наш парсер не был заблокирован
- DAYS: Ищем товары, размещенные в течение последних 4 дней
Шаг 1 — Загрузка и разбор списка Poshmark
Если мы откроем SEARCH_URL в нашем веб-браузере, мы увидим страницу с несколькими карточками разных пар джинсов.
Если вы используете инструменты разработчика в вашем браузере, вы можете увидеть, что вся необходимая информация, такая как дата создания продукта, название и цена, легко доступны.
В Python мы будем использовать requests для загрузки этой страницы, отправляя заголовки, которые мы создали.
Затем мы разберем HTML с помощью BeautifulSoup и извлечем все карточки товаров.
Результатом будет список HTML-блоков, как показано ниже:
[<div class="tile" data-created-at="2019-11-29 09:00:46 -0800" data-creator-handle="hola_aileenm" data-post-brand="Naked & Famous Denim" data-post-price="$50" data-post-size="32" id="5de14ebe08d2c22b5f051f92"><a class="covershot-con" data-pa-attr-listing_id="5de14ebe08d2c22b5f051f92" data-pa-attr-location="listing_tile" data-pa-click-type="image" data-pa-name="listing" href="/listing/Naked-and-Famous-mens-jeans-5de14ebe08d2c22b5f051f92" title="Naked and Famous men’s jeans"><img alt="Naked & Famous Denim " class="covershot add_pin_it_btn" src="https://di2ponv0v5otw.cloudfront.net/posts/2019/11/29/5de14ebe08d2c22b5f051f92/s_5de14edaa20dfce04b239d79.jpg" title="Naked & Famous Denim "/></a><div class="item-details"><div class="title-condition-con d-fl ai-fs jc-sb"><a class="title" data-pa-attr-listing_id="5de14ebe08d2c22b5f051f92" data-pa-click-type="link" data-pa-name="listing" href="/listing/Naked-and-Famous-mens-jeans-5de14ebe08d2c22b5f051f92">Naked and Famous men’s jeans</a></div><div class="price">$50 <span class="original">$128</span></div><ul class="pipe"><li class="size"><a href="/category/Men-Jeans?size=32" title="Size: 32">Size: <span class="val">Waist 32</span></a>...
Шаг 2 - Извлечение атрибутов списка товаров
Мы можем использовать методы BeautifulSoup для извлечения нужных данных.
Я буду сохранять цену, отдельный URL товара, заголовок товара и URL превью изображения.
Выводом будет кортеж из 4 извлеченных данных:
Шаг 3 - Расчет разницы во времени
Мы хотим отфильтровать наши результаты, чтобы включить только товары, размещенные в течение последних 4 дней.
Для этого мы извлечем дату создания товара, преобразуем ее в восточное время и найдем количество дней между текущим временем и датой создания.
Выводом будет просто целое число, например 2.
Мы можем использовать вывод для фильтрации наших результатов, используя константу DAYS.
Шаг 4 - Найти недавно опубликованные элементы
Мы начнем с итерации по списку карточек продуктов.
Если разница в днях меньше, чем наша константа DAYS, мы извлечем атрибуты и добавим кортеж в наш список recent_items.
Как только разница в днях для продукта станет больше, чем наша константа DAYS, мы выйдем из цикла.
Вывод будет таким же, как показано в начале этого руководства:
Шаг 5 - Сохранить результаты
Последнее, что нам нужно сделать, это сохранить результаты для Части 2.
Встроенный модуль сериализации Python, pickle, справится с этой задачей.
Следующие шаги
В следующей части этого руководства мы рассмотрим, как форматировать и отправлять электронные письма с использованием библиотек Python и учетной записи Gmail.
Если у вас есть вопросы или если вы делаете что-то интересное с парсингом, автоматизацией и Python, мне будет интересно услышать. Оставьте мне комментарий ниже.