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

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

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

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

一、爬取方法探索

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

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

二、分类信息获取

通过观察网页源代码,可以发现每个分类都对应一个具体的 id。例如,华语男歌手对应的 id1001,华语女歌手对应的 id1002。通过这些 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 matplotlib 中更换画布背景颜色
    查看>>
    Python进阶03 模块
    查看>>
    python matplotlib简单使用
    查看>>
    Python mock Patch os.environ 和返回值
    查看>>
    Python mock 修补另一个函数调用的函数
    查看>>
    python mqtt 客户端实现
    查看>>
    Python Multiprocessing - 将类方法应用于对象列表
    查看>>
    Python multiprocessing.Queue 与 multiprocessing.manager().Queue()
    查看>>
    Python multiprocessing使用详解
    查看>>
    python mysql 基于 sqlalvhrmy_Python操作MySQL:pymysql和SQLAlchemy
    查看>>
    python mysql 布尔类型_python语言的基础学习:基本类型,函数,面向对象,模块,mysql数据库...
    查看>>
    Python NLP完整项目实战教程(1)
    查看>>
    Python NLP自然语言处理详解
    查看>>
    python nltk nltk_data 离线安装,chatterbot
    查看>>
    Redis 限流的 3 种方式,还有谁不会?
    查看>>
    Python这么慢,为啥大公司还在用?
    查看>>
    python note 06 编码方式
    查看>>
    python numba 转灰度图_使用NumPy、Numba的简单使用(二)
    查看>>
    Python Numpy 关于 linspace()函数 使用详解(全)
    查看>>
    Python numpy插入、读取至postgreSQL数据库中bytea类型字段
    查看>>