Позволяет парсить цены на книги с libex.ru. Результаты умеет сохранять в CSV-файл и отправлять в канал бота в Telegram.
Для начала нужно создать json-файл с названием books.json с подобным содержанием:
[
{
"name": "Прошу, убей меня! Подлинная история панк-рока в рассказах участников",
"url": "https://www.libex.ru/detail/book733677.html"
},
{
"name": "Радуга тяготения",
"url": "https://www.libex.ru/detail/book560516.html"
}
]
name - может быть любым, это просто название книги чтобы было понятно для вас (например, вы хотите парсить несколько разных изданий одной и той же книги)
url - ссылка на страницу книги на libex.
Скрипт использует библиотеку dotenv для загрузки переменных окружений. Нужно создать файл .env и прописать в нём id чата в Телеграм и токен от бота. Как создать бота и получить id чата/токен - все инструкции есть в интернете.
Пример .env
TELEGRAM_BOT_TOKEN=7777777777:AAFNiqgWyGOV1_ONwZ_4kIK0e49tj4s_11g
TELEGRAM_CHAT_ID=777777
Если Телеграм не нужен, закомментируйте # в файле checker.py строки (это строки находящиеся в разных местах):
#from telegram import telegram_bot_sendtext
#sep = "\n"
#formatted_text = sep.join(books_and_prices)
#telegram_bot_sendtext(formatted_text)
Можно записать скрипт по расписанию с помощью файла job.py, в котором используется модуль schedule. На сервере для постоянного запуска скрипта в фоне я использовал pm2 следующей командой:
pm2 start job.py --interpreter python3 --interpreter-args -u
В случае если вы хотите чтобы результаты присылались в виде "Название книги: минимальная-максимальная цена руб.", команда должна выглядеть так:
pm2 start job.py --interpreter python --interpreter-args -u -- --minmax
То есть нужно передать параметр --minmax (после --). Название интерпретатора может отличаться - python / python3.
В данный момент результаты выводятся/записываются в файл в виде - одна строка - одно предложение книги с сайта:
И бегемоты сварились в своих бассейнах: АСТ: 900 руб.
И бегемоты сварились в своих бассейнах: АСТ: 900 руб.
И бегемоты сварились в своих бассейнах: АСТ: 1500 руб.
Позволяет оценить каждое предложение книги по цене. В будущем допишу другой способ вывода, см Todo
- Возможность выводить цены одной книги в том числе и в формате "минимальная цена - максимальная цена"
- Сделать имена переменных более понятными, чем сейчас когда я навёл хаоса с мин/макс ценой