BeautifulSoup и аргумент text выводит пустую строку хотя без него данные что я ищу есть
Страница которую я пращу https://r6.tracker.network/profile/pc/Sipmlne вчера писал для бота команду что бы тот парсил сайт и получал статистику игрока. Див который мне нужен имеет data- и класс trn-defstats
эту часть я хочу вывести точнее WINS и LOSSES

код
URL = None
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'}
@bot.command()
async def stats(ctx, nick):
global URL
website = 'https://r6.tracker.network/profile/pc/'
URL = website + nick
def get_html(url):
global HEADERS
r = requests.get(url, headers=HEADERS)
return r
def get_content(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div', class_='trn-text--dimmed')
img = soup.find('div', class_='trn-profile-header__avatar').find('img')
wins = soup.find(attrs={'data-stat': 'PVPMatchesWon'}).text #тут у меня проблема почему то выводит пустую строку
ranks = []
for item in items:
title = item.get_text(strip=True)
ranks.append({
'title': title,
})
MMR = ranks[1]['title']
TRANK = ranks[0]['title']
print(MMR)
print(TRANK)
print(wins)
return MMR, TRANK, img['src'], RANK_IMG[TRANK]
def parse():
global URL
html = get_html(URL)
if html.status_code == 200:
print('Connect to website')
mmr_rank = get_content(html.text)
return mmr_rank
else:
print('Error')
библиотеки
import discord
from discord.ext import tasks, commands
from config import settings
from bs4 import BeautifulSoup
import requests
Ответы (1 шт):
Автор решения: Fixator10
→ Ссылка
Не используйте requests в асинхронном коде. requests блокирует выполнение асинхронного кода. Старайтесь по возможности использовать асинхронные библиотеки. Например, aiohttp.
Учитывая вышесказанное, в данном случае вижу вариант проще - использовать ruia:
from ruia import Item, TextField
from tabulate import tabulate # https://pypi.org/project/tabulate/
class TrackerStat(Item):
target_item = TextField(css_select=".trn-defstat")
name = TextField(css_select=".trn-defstat__name")
value = TextField(css_select=".trn-defstat__value")
async def clean_name(self, value):
return value.strip()
async def clean_value(self, value):
return value.strip()
@bot.command()
async def stats(ctx, nick: str):
table = tabulate(
{
item.name: item.value
async for item in TrackerStat.get_items(
url=f"https://r6.tracker.network/profile/pc/{nick}"
)
}.items()
)
await ctx.send(f"```\n{table}\n```")