Вот еще один способ добиться тех же результатов без жесткого кодирования селекторов:
import requests
from bs4 import BeautifulSoup
r = requests.get('https://fmdataba.com/19/p/1165/lionel-messi/', headers={'User-Agent':'Mozilla/5.0'})
soup = BeautifulSoup(r.text, 'lxml')
datadict = {}
for container in ['TECHNICAL','MENTAL','PHYSICAL']:
elem = soup.select_one(f".panel-heading:contains('{container}') + .panel-body")
datadict[container] = {item.text:item.find_next_sibling().text for item in elem.select("td.active")}
print(datadict)
Выход:
{'TECHNICAL': {'Corners': '15', 'Crossing': '15', 'Dribbling': '20', 'Finishing': '20', 'First Touch': '19', 'Free Kick': '19', 'Heading': '10', 'Long Shots': '17', 'Long Throws': '4', 'Marking': '4', 'Passing': '20', 'Penalty Taking': '17', 'Tackling': '7', 'Technique': '20'}, 'MENTAL': {'Aggression': '7', 'Anticipation': '19', 'Bravery': '10', 'Composure': '18', 'Concentration': '13', 'Decisions': '20', 'Determination': '20', 'Flair': '20', 'Leadership': '14', 'Off The Ball': '16', 'Positioning': '5', 'Teamwork': '14', 'Vision': '20', 'Work Rate': '7'}, 'PHYSICAL': {'Acceleration': '18', 'Agility': '20', 'Balance': '20', 'Jumping Reach': '6', 'Natural Fitness': '14', 'Pace': '15', 'Stamina': '13', 'Strength': '9'}}