CoderCastrov logo
CoderCastrov
Парсер

Как отслеживать цену на товар на Back Market?

Как отслеживать цену на товар на Back Market?
просмотров
5 мин чтение
#Парсер

Желая приобрести более новую модель iPhone, я естественно обратился к восстановленным моделям на Back Market.

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

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

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

**requests_html**, **BeautifulSoup**, **gspread**, **oauth2client**.

Вот как работает скрипт:

Первая часть: извлечение цены

Я начинаю с указания двух URL-адресов двух разных моделей iPhone, которые мне нужны.

url = "https://www.backmarket.fr/fr-fr/p/iphone-13-pro-128-go-vert-alpin-debloque-tout-operateur/35d85a1e-6fa2-4331-ad51-a6e4c2a61a9e#l=10"
url2="https://www.backmarket.fr/fr-fr/p/iphone-13-pro-128-go-bleu-alpin-debloque-tout-operateur/f597a490-5e4c-450c-88a8-14be4d46f9c1#l=10"

Я использую библиотеку **requests_html** для подключения к веб-сайту и получения HTML-данных (включая HTML, сгенерированный с помощью JavaScript). Обратите внимание, что более известная библиотека requests не подходит для моих нужд, так как она не выполняет рендеринг HTML, сгенерированного с помощью JavaScript (поэтому цена не отображается при использовании этой библиотеки).

from requests_html import HTMLSession
session = HTMLSession()
resp = session.get(url)
print(resp.status_code)# 200 -> Успех

Затем я использую **BeautifulSoup** для разбора HTML-данных и более удобного извлечения необходимой информации, а именно цены товаров.

source=resp.html.html
soup = BeautifulSoup(source, 'html.parser')


price_nodes = soup.find_all('div', class_='w-full')


price=price_nodes[14].text.strip()
result=price[-8:]

Вторая часть: сохранение полученных значений в истории

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

Я подключаюсь к таблице Google Sheets, используя их API, для этого я использую библиотеки **gspread** и **oauth2client.**

import gspread
from oauth2client.service_account import ServiceAccountCredentials
import json
scopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
credentials = ServiceAccountCredentials.from_json_keyfile_name("data.json", scopes) # доступ к ранее загруженному ключу JSON
file = gspread.authorize(credentials) # аутентификация ключа JSON с помощью gspread
sheet = file.open("Data_backmarket") # открыть таблицу
sheet = sheet.sheet1 # замените sheet_name на имя вашей таблицы, например, это может быть sheet1

Чтобы настроить вашу таблицу Google Sheets, активируйте API Google Sheets и получите файл аутентификации data.json:

Google Sheets API с использованием Python: Полное руководство 2021

В этой статье мы рассмотрим, как получить доступ и редактировать Google Sheets с использованием Google Sheets API в Python. Таблица содержания...

pyshark.com

Я затем определяю функцию, которая будет добавлять новые результаты в мою таблицу Google Sheets на первую непустую строку.

def add_row(sheet, date: str, price: str, price2: str):
    """    sheet: таблица, в которую мы добавляем новую строку    date: дата извлечения    price: цена первого продукта    price2: цена второго продукта    """
    all_cells = sheet.range('A1:B3000')
    n_row = 0
    for e in all_cells:
        f = e.value
        if f != "":
            n_row += 1
    newRow = int(n_row / 2) + 1
    sRow = 'A' + str(newRow)
    print(sRow)
    sheet.update(sRow, [[date, price, price2]])

Мы получаем текущую дату и время извлечения:

from datetime import datetime

now = datetime.now()
date_time = now.strftime("%d/%m/%Y %H:%M")

print("Текущая дата и время: ", date_time)

Теперь мы можем добавить строку с результатами в нашу таблицу Google Sheets.

add_row(sheet, date_time, result[:-2].strip(), result2[:-2].strip())

Dernière partie : exécution automatique du script

Il nous reste désormais à automatiser l’exécution de ce script. Je vais l’exécuter toutes les heures.

Cela peut être automatisé en utilisant un outil tel que **cron** sous Linux.

Le problème est que si je mets en place cela sur ma machine personelle je devrais la laisser constamment allumer… J’ai donc eu l’idée de créer une machine virtuelle ou VM sur la Google Cloud Platform(GCP).

A la création de votre compte vous disposez de 300$ de crédit offert sur 4 mois, de quoi faire tourner le script sans problème toutes les heures pendant 4 mois.

Concernant le choix de l’instance de la VM, vous pouvez prendre une peu puissante car le script demande peu de ressource. J’ai choisi une VM avec le système d’exploitation Debian. Une fois qu’elle est créée, nous pouvons passer à la configuration de cron et la préparation de l’environnement python sur cette instance.

Je me connecte tout d’abord à cette instance via une fenêtre dans mon navigateur. L’avantage de cette VM debian est que python et cron sont installés par défaut sur cette dernière.

Pour commencer importer les fichier script.py, requirements.txt et présent sur mon github à l’adresse suivante :

axelooc59/Monitoring-Back-Market (github.com)

N’oublier pas votre fichier _data.json _(fichier pour l’authentification à l’API Google Sheets).

Pour télécharger un fichier sur la VM vous pouver cliquer sur TÉLÉCHARGER LE FICHIER

Pour installer les modules python exécuter simplement la commande suivante dans la console :

 pip3 install -r requirements.txt

Pour configurer l’exécution toutes les heures de notre script python :

Entrer la commande **crontab -e **(dans le même dossier ou vous avez placé le fichier python)

Ajouter ensuite la ligne suivante après les commentaires (I sur vim pour insérer):

Fermer et enregistrer le fichier (echap puis :wq sur vim)

La commande cron ajouté va exécuter le script toutes les heures à la 35ème minutes (adapter selon convenance).

Si vous voulez mettre en place une fréquence d’exécution différente :

Crontab.guru — The cron schedule expression editor

Prenez le résultat est remplacé le dans le fichier ouvert par la commande crontab -e

Et voilà notre monitoring est en place !

Результаты!

Вот результат после почти 2 месяцев мониторинга:

Таким образом, с помощью этого мониторинга я смог следить за сайтом Back Market и приобрести восстановленный iPhone на более чем на 100 евро дешевле, чем по начальной цене.

В заключение, мониторинг веб-сайтов может быть эффективным способом экономить деньги при онлайн-покупках. Используя Python, мы можем автоматизировать процесс и получать информацию о самых интересных предложениях в режиме реального времени. Совместно с такими инструментами, как Google Sheets, мы легко можем организовывать и наблюдать за изменениями цен.

Вы можете применить этот мониторинг на любом сайте, где цены колеблются. Вам просто нужно изменить получаемый элемент и URL.

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

Спасибо за чтение, надеюсь, вам понравился этот небольшой проект!