Этот скрипт напечатает здесь все имена:
import requests
from bs4 import BeautifulSoup
url = 'https://dota2.gamepedia.com/Abaddon/Counters'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
all_heros = [a.text for a in soup.select('b > a')]
#print them:
print(*all_heros, sep='\n')
Печать:
Ancient Apparition
Axe
Brewmaster
Doom
Lina
Lion
Mars
Outworld Devourer
Silencer
Shadow Demon
Death Prophet
Mirana
Bane
Batrider
Beastmaster
Chen
Techies
Bloodseeker
Necrophos
Nyx Assassin
Storm Spirit
Phantom Assassin
Io
Axe
Legion Commander
Centaur Warrunner
Oracle
EDIT (Чтобы очистить категории, вы можете использовать функцию .find_previous()
):
import requests
from bs4 import BeautifulSoup
url = 'https://dota2.gamepedia.com/Abaddon/Counters'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
data = {}
for hero in soup.select('b > a'):
data.setdefault(hero.find_previous(class_='mw-headline').text, []).append(hero.text)
#print them:
from pprint import pprint
pprint(data)
Печать:
{'Bad against...': ['Ancient Apparition',
'Axe',
'Brewmaster',
'Doom',
'Lina',
'Lion',
'Mars',
'Outworld Devourer',
'Silencer',
'Shadow Demon'],
'Good against...': ['Death Prophet',
'Mirana',
'Bane',
'Batrider',
'Beastmaster',
'Chen',
'Techies',
'Bloodseeker',
'Necrophos',
'Nyx Assassin'],
'Works well with...': ['Storm Spirit',
'Phantom Assassin',
'Io',
'Axe',
'Legion Commander',
'Centaur Warrunner',
'Oracle']}