telebot dotabaff parser

Пишу бота на python с помощью telebot, который парсит сайт dotabuff.com по игре Дота 2. При отправке боту айди аккаунта, он должен отправлять топ 5 героев с самым большим количеством игр. Но по какой-то причине, сортировки не происходит и бот отправляет мне не тот список героев.

Какой вывод нужен:

Герой: Earth Spirit2024-04-20 Сыграно матчей: 394 Выигрышей: 59.14%

Герой: Invoker2024-04-26 Сыграно матчей: 263 Выигрышей: 57.41%

Герой: Io2022-10-12 Сыграно матчей: 44 Выигрышей: 61.36%

Герой: Legion Commander2024-04-20 Сыграно матчей: 40 Выигрышей: 52.50%

Герой: Techies2024-03-11 Сыграно матчей: 39 Выигрышей: 43.59%

Какой вывод сейчас:

  1. Герой: Lina2023-03-18, Сыграно матчей: 9, Выигрышей: 33.33%%

  2. Герой: Phoenix2022-10-20, Сыграно матчей: 8, Выигрышей: 25.00%%

  3. Герой: Storm Spirit2022-05-27, Сыграно матчей: 8, Выигрышей: 50.00%%

  4. Герой: Timbersaw2023-05-07, Сыграно матчей: 8, Выигрышей: 25.00%%

  5. Герой: Axe2024-03-20, Сыграно матчей: 7, Выигрышей: 28.57%%

import telebot
import requests
from bs4 import BeautifulSoup

bot = telebot.TeleBot(token)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'}


<...>


@bot.message_handler(commands=['get_heroes_list'])
def handle_heroes(message):
    bot.send_message(message.chat.id, "Отправь мне айди аккаунта и я дам тебе информацию о нем")

    def heroes_list(message):
        # URL профиля игрока на Dotabuff
        id = str(message.text)
        heroes_profile_url = 'https://www.dotabuff.com/players/' + id + '/heroes'
        # Отправляем запрос на сайт
        response = requests.get(heroes_profile_url, headers=header)
        # Проверяем успешность запроса
        if response.status_code == 200:
            # Используем BeautifulSoup для парсинга HTML
            soup = BeautifulSoup(response.text, 'html.parser')

            # Находим таблицу со статистикой героев игрока
            heroes_table = soup.find('table', class_='sortable')

            heroes = []
            # Находим строки таблицы со статистикой героев
            rows = heroes_table.find_all('tr')
            # Проходим по каждой строке и выводим информацию о герое
            for row in rows[1:]:  # Пропускаем первую строку с заголовками
                cols = row.find_all('td')
                hero_name = cols[1].text.strip()
                matches_played = cols[2].text.strip()
                winrate = cols[3].text.strip()
                heroes.append((hero_name, matches_played, winrate))

            # Сортируем список героев по количеству матчей в порядке убывания
            heroes.sort(key=lambda x: x[1], reverse=True)

            for i, hero in enumerate(heroes[:5], 1):
                bot.send_message(message.chat.id,
                            f"{i}. Герой: {hero[0]}, \nСыграно матчей: {hero[1]}, \nВыигрышей: {hero[2]}%")
            for i in heroes:
                print(i)


        else:
            # Выводим сообщение об ошибке
            print('Ошибка при запросе к серверу')
    bot.register_next_step_handler(message, heroes_list)

Ответы (0 шт):