通过反复使用美丽的汤刮刮网站来收集音乐艺术家

问题描述 投票:-1回答:1

我正在一个项目中收集音乐家/团体/艺术家的名字,然后我开始在此网站上工作:https://www.canzoni.it/artisti/lettera/a(具有简单的html结构)。我的目标是收集本节中从A到Z的所有名称。我想创建一个函数并进行重新构造。这是代码:

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

问题之一是返回的两个列表包含名称的first页(即https://www.canzoni.it/artisti/lettera/a/1,而不是最后一个(https://www.canzoni.it/artisti/lettera/a/8),我不明白为什么。

对于第二个问题,我知道这样做,我的程序没有将我需要的全部存储在“链接”和“艺术家”列表中,因为在每个循环中,它们都会重新初始化,但是我不知道如何最后获取完整列表。

python recursion web-scraping beautifulsoup
1个回答
0
投票

关于第二个问题。在每个递归调用中,您的链接和艺术家都被重新初始化。因此,在外部函数中,您可以创建其他列表,而在函数末尾,可以将该链接附加到其上。

© www.soinside.com 2019 - 2024. All rights reserved.