Сбор музыкантов musi c путем рекурсивной очистки сайтов с помощью BeautifulSoup - PullRequest
0 голосов
/ 22 февраля 2020

Я работаю над проектом по сбору имен музыкантов / групп / художников, и я начал работать над этим сайтом: 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 они переинициализируются, но я не знаю, как сделать, чтобы в конце получить полные списки.

1 Ответ

1 голос
/ 22 февраля 2020

Относительно второй проблемы. При каждом вызове рекурсии ваши ссылки и исполнители инициализируются повторно. Так что вне функции вы можете создать другой список, а в конце функции вы можете добавить эту ссылку к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...