Проблема: нехватка видеокарт из‑за майнеров
После продажи старой видеокарты я захотел обновиться. При попытке купить новую карту в любимом магазине я столкнулся с тем, что даже обычные модели, как 3070 и 3090, быстро распродаются. Особенно 3080, которую я хотел, распродается «как горячие пирожки» из‑за майнеров. Появление новых товаров происходит поштучно и на короткий срок, поэтому ручной мониторинг сайта неэффективен.
Решение: автоматический скрапинг на Python
Я решил автоматизировать поиск нужных карт, не используя 1С, а выбрав Python – язык, который быстро освоить и легко интегрировать с внешними сервисами. За час я разобрался со скрапингом и написал скрипт, который:
- Раз в 60 секунд делает запрос к странице с каталогом видеокарт.
- Парсит список товаров и ищет модели 3070 и 3080.
- Если находит подходящий товар, сохраняет его данные (название, цена, ссылка) в базу данных.
- Отправляет уведомление в Telegram через бота с краткой информацией и ссылкой на товар.
Как это работает
Скрипт использует стандартные библиотеки Python: requests для HTTP‑запросов, BeautifulSoup для парсинга HTML и sqlite3 (или любой другой легковесный СУБД) для хранения найденных записей. Telegram‑бот реализован через python-telegram-bot, который отправляет сообщение, когда скрипт обнаруживает новую доступную видеокарту.
Пример логики скрипта
import requests
from bs4 import BeautifulSoup
import sqlite3
import time
import telegram
BOT_TOKEN = 'YOUR_BOT_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'
URL = 'https://example.com/gpus'
conn = sqlite3.connect('gpus.db')
cur = conn.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS cards (id INTEGER PRIMARY KEY, name TEXT, price TEXT, link TEXT, seen INTEGER)''')
bot = telegram.Bot(token=BOT_TOKEN)
while True:
r = requests.get(URL)
soup = BeautifulSoup(r.text, 'html.parser')
cards = soup.select('.product-card')
for card in cards:
name = card.select_one('.name').text.strip()
if name in ('RTX 3070', 'RTX 3080'):
price = card.select_one('.price').text.strip()
link = card.select_one('a')['href']
cur.execute('INSERT OR IGNORE INTO cards (name, price, link, seen) VALUES (?, ?, ?, 0)', (name, price, link))
conn.commit()
bot.send_message(chat_id=CHAT_ID, text=f"{name} доступна: {price}\n{link}")
time.sleep(60)
Код выше – упрощённый пример. В реальном проекте стоит добавить обработку ошибок, логирование и более гибкую фильтрацию товаров.
Планы на будущее
В ближайшее время я планирую «причешить» скрипт, добавить более продвинутые функции: хранение истории цен, уведомления по email, интеграцию с другими площадками. Также подготовлю короткое видео‑обзор, которое опубликую на своём канале.
Вывод
Автоматический скрапинг на Python позволяет быстро реагировать на появление нужных видеокарт даже в условиях высокой конкуренции со стороны майнеров. Такой подход экономит время и повышает шансы на покупку желаемой модели.
