Python爬虫实战-批量爬取下载网易云音乐

大家好,我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战https://blog.csdn.net/caoli201314/article/details/132882813
1小时掌握Python操作Mysql数据库之pymysql模块技术https://blog.csdn.net/caoli201314/article/details/133199207
一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、seleniumhttps://blog.csdn.net/caoli201314/article/details/134071440

近日锋哥又卷了一波Python实战课程-批量爬取下载网易云音乐,主要是巩固下Python爬虫基础

视频版教程:Python爬虫实战-批量爬取下载网易云音乐https://www.bilibili.com/video/BV1aw411M72B/

网易云音乐官方主页:

复制代码
https://music.163.com/

比如我们打开邓紫棋的主页:

复制代码
https://music.163.com/#/artist?id=7763

现在我们要爬取这里面的音乐文件,我们正常人的分析思路是这样的。

复制代码
    思路:
    1,根据歌手链接地址获取页面源码
    2,解析页面源码获取所有歌曲列表
    3,遍历,下载每首歌曲

前面两步很简单,很容易实现。

第三步,我们点 音乐列表 前面的播放按钮,当前页面底部会出现播放器,播放音乐。

谷歌 F12 进入开发者工具,点 Media 我们是可以得到音乐的源文件的。包括VIP音乐

我们要通过Python得到这个请求地址,需要进行js逆向,破解,得到js方法源代码,然后进行模拟拼接动态请求,得到音乐二进制文件,锋哥上有老,下有小,容易受到律师函,进去踩缝纫车,就不搞这种方式。

我们还是采用网易云官方提供的API接口进行获取音乐文件,包括在线播放。

复制代码
网易云音乐开放接口:http://music.163.com/song/media/outer/url?id=歌曲ID  (VIP音乐下载不了)

完整可运行代码如下。具体代码分析,可以看帖子开头的视频教程

python 复制代码
"""
    思路:
    1,根据歌手链接地址获取页面源码
    2,解析页面源码获取所有歌曲列表
    3,遍历,下载每首歌曲
    python爬虫前置基础视频教程:http://python222.com/post/7
    备注:网易云音乐开放接口:http://music.163.com/song/media/outer/url?id=歌曲ID  (VIP音乐下载不了)
    测试:https://music.163.com/#/artist?id=7763
    仅供学习测试
"""

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

# 获取用户输入的歌手链接页面
singer_url = input("请输入您要下载的歌手页面链接:")
# 格式化下载链接
url = singer_url.replace("/#", '')
response = requests.get(url=url, headers=headers)
# print(response.text)

# 实例化bs4
soup = BeautifulSoup(response.text, 'lxml')

# 获取歌曲列表
song_list = soup.select("ul.f-hide li a")
print(song_list)


def download_song(song_name, song_id):
    """
    下载歌曲
    :param song_name: 歌曲名称
    :param song_id: 歌曲ID
    :return:
    """
    music_open_api = "http://music.163.com/song/media/outer/url?id=" + song_id
    music = requests.get(url=music_open_api, headers=headers)
    # 下载歌曲
    try:
        with open(f"./music/{song_name}.mp3", 'wb') as file:
            file.write(music.content)
            print(f"《{song_name}》下载成功")
    except:
        print(song_name, "下载异常")


for song in song_list:
    # 获取歌曲名称
    song_name = song.text
    # print(song_name)
    # 获取歌曲ID
    song_id = song['href'].split("=")[1]
    # 下载歌曲
    download_song(song_name, song_id)
相关推荐
Hgfdsaqwr1 天前
实战:用Python开发一个简单的区块链
jvm·数据库·python
程序员三藏1 天前
接口测试及常用接口测试工具总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
小二·1 天前
Python Web 开发进阶实战 :AI 原生数字孪生 —— 在 Flask + Three.js 中构建物理世界实时仿真与优化平台
前端·人工智能·python
Whisper_Sy1 天前
Flutter for OpenHarmony移动数据使用监管助手App实战 - 网络状态实现
android·java·开发语言·javascript·网络·flutter·php
Bony-1 天前
Go语言垃圾回收机制详解与图解
开发语言·后端·golang
hmywillstronger1 天前
【Rhino】【Python】 查询指定字段并cloud标注
开发语言·python
新缸中之脑1 天前
Weave.js:开源实时白板库
开发语言·javascript·开源
我能坚持多久1 天前
D16—C语言内功之数据在内存中的存储
c语言·开发语言
leo__5201 天前
C#与三菱PLC串口通信源码实现(基于MC协议)
开发语言·c#
dyyx1111 天前
如何从Python初学者进阶为专家?
jvm·数据库·python