/libex-parser

Парсер цен книг libex.ru

Primary LanguagePythonMIT LicenseMIT

Парсер цен книг с libex.ru

Позволяет парсить цены на книги с 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.

Настройки Telegram

Скрипт использует библиотеку 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

Todo

  • Возможность выводить цены одной книги в том числе и в формате "минимальная цена - максимальная цена"
  • Сделать имена переменных более понятными, чем сейчас когда я навёл хаоса с мин/макс ценой