• Страница 1 из 1
  • 1
Форум » ψ Общий раздел » Программирование » Python » ТГ бот для слежки курса известных криптовалют на python (По типу Bitcoin, Ethereum, Dogecoin, Litecoin)
ТГ бот для слежки курса известных криптовалют на python

Дата: Сб, 29.01.2022, 17:00 | Сообщение 1
Регистр
04.01.2021
Сообщений
455

Репутация
Бот для слежки курса известных криптовалют по типу Bitcoin, Ethereum, Dogecoin, Litecoin на языке программирования python.



Делать бота мы будем c aiogram потому что это довольно простой и полностью асинхронный фреймворк для TelegramBotApi и инструмента Selenium для автоматизации действий веб-браузера, плюс он еще очень не плох при парсинге сайтов с помощью локатора xpath для нахождения элементов на HTML странице

Мы будем парсить сайт https://bitinfocharts.com/ru/crypto-kurs/, так как он мне показался достаточно информативным и немного сложным.

И так, приступим!

Установка модулей:

Код
pip install aiogram
pip install selenium


Импорт нужных модулей:

Код Python:

Код
#импортируем aiogram для создания нашего бота from aiogram import types, Dispatcher, executor, Bot #дополнение к aiogram для корректирования текста import aiogram.utils.markdown as fmt #модуль selenium для парсинга from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager #модуль time для обработки событий к selenium from time import sleep


Вставляем токен для бота:

Код Python:

Код
#вставляем токен нашего бота, которого мы можем получить у botfather при создании самого бота TOKEN ="INSERT TOKEN HERE"#инициализируем бота bot = Bot(token = TOKEN)#инициализируем обработчик событий бота dp = Dispatcher(bot)


Создаем команду start:

Для копирования элемента xpath мы переходим в код элемента, нажимаем на этот значок:



и наводим на нужный нам элемент, например на текущий курс Bitcoin:



и копируем с кода элемента путь xpath



(потом поймёте для чего я вам это показал)

Код Python:

Код
#обработка команды /cryptocheck @dp.message_handler(commands = ["cryptocheck"]) async def cryptocheck(message: types.Message): #Сообщение от бота про то, что идет прогрузка данных await bot.send_message(message.chat.id, "Идет прогрузка данных...") #переменная options, которая хранит стандартные настройки браузера Chrome options = webdriver.ChromeOptions() #параметр, который скрывает окно браузера Chrome options.headless = True #переменная browser, которая создает эмуляцию настоящего пользователя, #В options мы передаем все наши параметры для эмуляции браузера, которые мы указали выше browser = webdriver.Chrome(ChromeDriverManager().install(), options = options) #отправляем запрос на нам нужный сайт #(перейдите на сайт, чтобы больше понять, о чем пойдет все дальше) browser.get("https://bitinfocharts.com/ru/crypto-kurs/") #делаем задержку для прогрузки сайта sleep(3) #Получаем все нужные нам элементы с помощью локатора xpath #получаем основной курс bitcoin на данный момент в долларах btc = browser.find_element_by_xpath("//*[@id='tr_1']/td[2]/a") #получаем изменение курса в процентах за 12 часов btc2 = browser.find_element_by_xpath("//*[@id='tr_1']/td[2]/span[1]/b") #получаем изменение курса в процентах за 7 дней btc3 = browser.find_element_by_xpath("//*[@id='tr_1']/td[2]/span[2]/b") #забираем ссылку для большего ознакомления btc_href = browser.find_element_by_xpath("//*[@id='tr_1']/td[2]/a") eth = browser.find_element_by_xpath("//*[@id='tr_919']/td[2]/a") eth_2 = browser.find_element_by_xpath("//*[@id='tr_919']/td[2]/span[1]/b") eth_3 = browser.find_element_by_xpath("//*[@id='tr_919']/td[2]/span[2]/b") eth_href = browser.find_element_by_xpath("//*[@id='tr_919']/td[2]/a") dog_coin = browser.find_element_by_xpath("//*[@id='tr_3']/td[2]/a") dog_pri = browser.find_element_by_xpath("//*[@id='tr_3']/td[2]/span[1]/b") dog_pri2 = browser.find_element_by_xpath("//*[@id='tr_3']/td[2]/span[2]/b") dog_href = browser.find_element_by_xpath("//*[@id='tr_3']/td[2]/a") ltc_coin = browser.find_element_by_xpath("//*[@id='tr_2']/td[2]/a") ltc_pri = browser.find_element_by_xpath("//*[@id='tr_2']/td[2]/span[1]/b") ltc_pri2 = browser.find_element_by_xpath("//*[@id='tr_2']/td[2]/span[2]/b") ltc_href = browser.find_element_by_xpath("//*[@id='tr_2']/td[2]/a") #смотрим какой знак(+ или -) у изменений курса bitcoin за 12 часов def btc_chas(): #если первый знак равняется + if btc2.text[0] == "+": #тогда создаем словарь с заголовком title и сообщение бота с изменениями курса в процентах bit = {"title":fmt.text(f"Bitcoin повысился на {btc2.text} за 12 часов)))")} #выводим значение заголовка title из словаря bit return bit["title"] #если первый знак равняется - elif btc2.text[0] == "-": #тогда создаем словарь с заголовком title и сообщение бота с изменениями курса в процентах bit = {"title":fmt.text(f"Bitcoin опустился на {btc2.text} за 12 часов(((")} #выводим значение заголовка title из словаря bit return bit["title"] #смотрим какой знак(+ или -) у изменений курса bitcoin за 7 дней def btc_chay(): if btc3.text[0] == "+": #тогда создаем словарь bit с заголовком title и сообщение бота с изменениями курса в процентах bit = {"title":fmt.text(f"Bitcoin повысился на {btc3.text} за 7 дней)))")} #выводим значение заголовка title из словаря bit return bit["title"] elif btc3.text[0] == "-": #тогда создаем словарь с заголовком title и сообщение бота с изменениями курса в процентах bit = {"title":fmt.text(f"Bitcoin опустился на {btc3.text} за 7 дней)))")} #выводим значение заголовка title из словаря bit return bit["title"] #и так дальше.. def eth_chas(): if eth_2.text[0] == "+": eth = {"title":fmt.text(f"Ethereum повысился на {eth_2.text} за 12 часов)))")} return eth["title"] elif eth_2.text[0] == "-": eth = {"title":fmt.text(f"Ethereum опустился на {eth_2.text} за 12 часов(((")} return eth["title"] def eth_chay(): if eth_3.text[0] == "+": eth2 = {"title":fmt.text(f"Ethereum повысился на {eth_3.text} за 7 дней)))")} return eth2["title"] elif eth_3.text[0] == "-": eth2 = {"title":fmt.text(f"Ethereum опустился на {eth_3.text} за 7 дней(((")} return eth2["title"] def dog_chas(): if dog_pri.text[0] == "+": dog = {"title":fmt.text(f"Dogecoin повысился на {dog_pri.text} за 12 часов)))")} return dog["title"] elif dog_pri.text[0] == "-": dog = {"title":fmt.text(f"Dogecoin опустился на {dog_pri.text} за 12 часов(((")} return dog["title"] def dog_chay(): if dog_pri2.text[0] == "+": dog2 = {"title":fmt.text(f"Dogecoin повысился на {dog_pri2.text} за 7 дней)))")} return dog2["title"] elif dog_pri2.text[0] == "-": dog2 = {"title":fmt.text(f"Dogecoin опустился на {dog_pri2.text} за 7 дней(((")} return dog2["title"] def ltc_chas(): if ltc_pri.text[0] == "+": ltc = {"title":fmt.text(f"Litecoin повысился на {ltc_pri.text} за 12 часов)))")} return ltc["title"] elif ltc_pri.text[0] == "-": ltc = {"title":fmt.text(f"Litecoin опустился на {ltc_pri.text} за 12 часов(((")} return ltc["title"] def ltc_chay(): if ltc_pri2.text[0] == "+": ltc2 = {"title":fmt.text(f"Litecoin повысился на {ltc_pri2.text} за 7 дней)))")} return ltc2["title"] elif ltc_pri2.text[0] == "-": ltc2 = {"title":fmt.text(f"Litecoin опустился на {ltc_pri2.text} за 7 дней(((")} return ltc2["title"] #Бот сообщает нам о курсе всех нам нужных криптовалют await message.answer( #создаем одно большое сообщения, в котором будет сообщаться подробности о нужных нам криптовалют fmt.text( #Бот выводит нам заголовок "---Bitcoin---" с "\n" для перехода на новою строку fmt.text("---Bitcoin---\n"), #Бот выводит нам текущий курс Bitcoin и переходим на новою строку fmt.text(f"Текущий курс:{btc.text}\n"), #Бот выводит нам изменения о курсе Bitcoin за 12 часов и переходим на новою строку btc_chas()+ "\n", #Бот выводит нам изменения о курсе Bitcoin за 7 дней и переходим на новою строку btc_chay() + "\n", #Бот дает нам ссылку для большего ознакомления fmt.text(f"Узнать больше о курсе Bitcoin можете по этой ссылке:\n", btc_href.get_attribute('href'))+"\n", fmt.text("---Ethereum---\n"), fmt.text(f"Текущий курс:{eth.text}\n"), eth_chas() + "\n", eth_chay() + "\n", fmt.text("Узнать больше о курсе Ethereum можете по этой ссылке:\n", eth_href.get_attribute('href'))+"\n", fmt.text("---Dogecoin---\n"), fmt.text(f"Текущий курс:{dog_coin.text}\n"), dog_chas() + "\n", dog_chay() + "\n", fmt.text(f"Узнать больше о курсе Dogecoin можете по этой ссылке:\n", dog_href.get_attribute('href'))+"\n", fmt.text("---Litecoin---\n"), fmt.text(f"Текущий курс:{ltc_coin.text}\n"), ltc_chas() + "\n", ltc_chay() + "\n", fmt.text(f"Узнать больше о курсе Litecoin можете по этой ссылке:\n", ltc_href.get_attribute('href'))+"\n", ), #скрываем панель ссылок disable_web_page_preview=True ) #задержка sleep(3) #параметр, с помощью которого работает бот executor.start_polling(dp)


Ну в принципе все, до скорого!

Подписывайтесь! Рекомендуйте нашу группу своим знакомым профессионалам в IT WiN-Prog Наша группа ВКонтакте!



Форум » ψ Общий раздел » Программирование » Python » ТГ бот для слежки курса известных криптовалют на python (По типу Bitcoin, Ethereum, Dogecoin, Litecoin)
  • Страница 1 из 1
  • 1
Поиск: