博客
关于我
一文带你快速爬取网易云音乐,就是这么简单!
阅读量:220 次
发布时间:2019-03-01

本文共 2839 字,大约阅读时间需要 9 分钟。

网易云音乐歌手爬取 Python 脚本

作为一名计算机学院的大数据专业大三学生,我最近对网络爬取技术有了深入的学习。网易云音乐作为国内知名的音乐平台,其歌手信息资源丰富且分类详细。为了更好地了解网易云音乐的数据结构,我决定开发一个爬取歌手信息的 Python 脚本。

一、爬取方法探索

在开始编写代码之前,首先需要了解目标网页的数据结构。网易云音乐的网页版页面信息获取通常需要通过爬取网页源代码来实现。然而,直接访问网页版页面时,往往会遇到 iframe 标签的问题,这会导致爬虫难以获取到预期的数据。

经过实验发现,通过直接访问特定分类的 URL(如 https://music.163.com/discover/artist),可以获取到所需的分类信息。我们可以通过分析网页源代码,提取出歌手分类和对应的 URL。

二、分类信息获取

通过观察网页源代码,可以发现每个分类都对应一个具体的 id。例如,华语男歌手对应的 id 是 1001,华语女歌手对应的 id 是 1002。通过这些 id 值,可以拼接出完整的爬取 URL。

三、爬取歌手数据

针对每个分类,我们可以编写一个函数来获取对应的歌手信息。通过解析网页源代码,可以提取出歌手的名字和对应的链接。具体实现如下:

  • 解析分类信息:通过 XPath 表达式提取出所有分类信息。
  • 拼接爬取 URL:将分类 id 拼接到基础 URL 中,生成完整的爬取链接。
  • 解析歌手信息:通过解析每个分类页面的网页源代码,提取出具体的歌手名字和对应的链接。
  • 四、完整代码实现

    结合以上分析,整理出完整的爬取代码如下:

    import requestsfrom lxml import etreeimport csvimport timeimport random# 设置请求头headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}def parse_url(url):    """解析 URL,获取响应内容"""    time.sleep(random.random())    response = requests.get(url=url, headers=headers)    return response.content.decode('utf-8')def parse_html(html):    """使用 XPath 解析 HTML,返回 XPath 对象"""    etree_obj = etree.HTML(html)    return etree_objdef get_type_url():    """获取所有歌手分类"""    types = []    start_url = "https://music.163.com/discover/artist"    html = parse_url(start_url)    etree_obj = parse_html(html)    type_name_list = etree_obj.xpath('//a[@class="cat-flag"]/text()')    type_url_list = etree_obj.xpath('//a[@class="cat-flag"]/@href')    for name, url in zip(type_name_list, type_url_list):        types.append({            'name': name,            'url': url        })    return typesdef get_data(url, type_name):    """爬取歌手数据"""    item = {        'type': type_name,        'name': '',        'url': ''    }    html = parse_url(url)    etree_obj = parse_html(html)    artist_name_list = etree_obj.xpath('//a[@class="nm nm-icn f-thide s-fc0"]/text()')    artist_url_list = etree_obj.xpath('//a[@class="nm nm-icn f-thide s-fc0"]/@href')    for name, url in zip(artist_name_list, artist_url_list):        item['name'] = name        item['url'] = f"{base_url}{url[1:]}"        items.append(item)def save():    """将数据保存到 CSV 文件中"""    with open("./wangyinyun.csv", 'a', encoding='utf-8') as file:        writer = csv.writer(file)        for item in items:            writer.writerow(item.values())def start():    """启动爬虫"""    types = get_type_url()    for type_info in types:        for initial in range(65, 91):            url = f"{base_url}{type_info['url']}&initial={initial}"            print(url)            get_data(url, type_info['name'])    save()if __name__ == '__main__':    start()

    五、运行结果

    运行上述代码后,可以看到爬取到的歌手信息会被保存到 wangyinyun.csv 文件中。通过检查爬取到的数据,可以发现分类信息和具体歌手信息都已正确获取。

    六、总结

    通过本次项目,我深入了解了网易云音乐的数据结构,并掌握了使用 Python 脚本爬取网页信息的技巧。虽然过程中遇到了一些挑战,但通过不断实验和修改,最终成功实现了目标。下文会继续探讨更多有趣的网络爬取项目!

    转载地址:http://kzwv.baihongyu.com/

    你可能感兴趣的文章
    python判断密码是否正确_python密码判断是否符合要求的方法
    查看>>
    python判断字符串包含中文_Python 判断字符串是否包含中文
    查看>>
    python删除第一行_Python 乱码指北:一行删掉根目录
    查看>>
    Python删除列表元素的三种方法
    查看>>
    python初步学习-python数据类型-集合(set)
    查看>>
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
    查看>>
    python列表前几个_python之列表
    查看>>
    python列表元组
    查看>>
    Python列表/元组/字典和集合使用
    查看>>
    python列表 行列选择_python_pandas_dataframe_行列选择_切片操作
    查看>>
    python列表
    查看>>
    python列出当前目录、子目录和文件的脚本
    查看>>
    python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体测管理系统的设计与实现(程序+开题+论文)
    查看>>
    Python切片对象和__getitem__
    查看>>
    python+flask计算机毕业设计高校体育赛事系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体育运动会比赛系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校危化品管理系统(程序+开题+论文)
    查看>>