Это альтернативное решение, основанное на извлечении сезона из URL-адреса эпизода с помощью регулярного выражения, поскольку кажется, что URL-адреса всегда заканчиваются на '? Ttag = season: '. Насколько я могу судить, это, кажется, самый надежный источник информации, когда дело доходит до нумерации сезонов.
from bs4 import BeautifulSoup
import requests
import re
resp = requests.get('https://www.cbc.ca/podcasting/includes/uncover.xml')
soup = BeautifulSoup(resp.text)
epi_ls = get_playable_podcast0(soup) # using your function here
seasons = {}
for ep in epi_ls:
ep_url = ep.get('url')
regex_match = re.search("(?<=season:)[0-9]+", ep_url)
if not regex_match:
continue
season_number = regex_match[0]
if season_number in seasons:
seasons[season_number].append(ep)
else:
seasons[season_number] = [ep]
Есть несколько эпизодов, которые не относятся к определенному сезону, например особенный сезон 1/3/5 (я видел что-то подобное), так что я думаю, что это не сработает для них. Преимущество этого метода заключается в том, что на него не влияет то, как авторы подкаста зарегистрировали неправильные itunes: season / itunes: episode для нескольких эпизодов. Примером этого является «S3 E3: Meet Me Under The Clock», который зарегистрирован с <itunes:season>1</itunes:season>
и <itunes:episode>8</itunes:episode>
.