Ваша ошибка в том, что вы анализируете с помощью html5lib.Для любого правильно сформированного html выбор парсера не очень важен.Однако для не правильно сформированного html (как этот), html5lib, похоже, имеет проблемы.Вы должны использовать html.parser
или lxml
(очевидно, html.parser
безопаснее)
Однако этот код делает то, что вы хотите сделать:
soup = BeautifulSoup(res.text, 'html.parser')
programs = soup.find_all("a", class_='ama__promo--background')
for program in programs:
program_name = program.find("h3").text
program_id = program.find_all("small")[-1].text.split(': ')[1].strip()
print(program_name, program_id