Я работаю над проектом по сбору имен музыкантов / групп / художников, и я начал работать над этим сайтом: https://www.canzoni.it/artisti/lettera/a (который имеет простую структуру html). Моя цель состоит в том, чтобы собрать все имена, которые есть в этом разделе, от А до Я. Я думал создать функцию и работать рекурсивно. вот код:
def crawl_canzoni_it(url, base = 'https://www.canzoni.it'):
links=[]
artists=[]
r = requests.get(base+url).text
obj = BeautifulSoup(r, "html.parser")
for i in obj.select('.ul_freccia li'):
for link in i.findAll('a'):
links.append(link['href'])
for i in obj.select('.ul_freccia li'):
for link in i.findAll('a'):
artists.append(link.text)
for i in obj.findAll('a'):
if i.has_attr('title'):
if i['title'] == 'Vai alla pagina Successiva':
print(base+i['href'])
crawl_canzoni_it(i['href'])
else:
pass
else: pass
return artists, links
одна из проблем состоит в том, что два возвращенных списка содержат первую страницу имен (то есть https://www.canzoni.it/artisti/lettera/a/1, а не последний (https://www.canzoni.it/artisti/lettera/a/8), и я не понимаю, почему.
для второй проблемы, я знаю, что при этом моя программа не хранит все, что мне нужно, в перечисляет «ссылки» и «исполнители», потому что при каждом l oop они переинициализируются, но я не знаю, как сделать, чтобы в конце получить полные списки.