Python实战项目之爬取网易云热榜歌单并进行批量下载

Python实战项目之爬取网易云热榜歌单并进行批量下载-源创宝库吧
Python实战项目之爬取网易云热榜歌单并进行批量下载
此内容为付费阅读,请付费后查看
库币5
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
付费阅读
执行该源码需要提前安装好Python环境!!!

步骤一:

桌面新建文本文档改后缀名为py

20240801105441600-image

20240801105453818-image

把他拖进编辑器中(如vscode,IDLE,pycharm)等

步骤二:

按住win+r键弹出运行框输入cmd回车

20240801105835723-image

20240801105849656-image

20240801105917160-image

需要安装requests模块。安装命令为:pip install + 模块名     这里为pip install requests

步骤三:

回到编辑器,开始写代码,首先导入请求模块。

import requests

打开网易云飙升榜飙升榜 – 排行榜 – 网易云音乐 (163.com)按f12打开开发者工具找到网络,刷新页面

20240801112333698-image

找到music.163.com,点击

20240801112415936-image

接下来我们需要把这个榜单的URL写上

url = 'https://music.163.com/discover/toplist'

下面还要写请求头,需要user-agent(简称ua),cookie,referer,content-type

20240801112837353-image

20240801112901133-image

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
    'cookie': 'hb_MA-BFF5-63705950A31C_source=www.baidu.com; JSESSIONID-WYYY=Xos42jRjD0hwIuRY6f8mO5qByfH85AO%2Fb3TsiDGPf9kcA7CJC24GRhu5K%2B05YCc%2Bik6YCRy93%5Cht5JGjA2RPyp28AUT2v9gjtRmMibj%5CUr51wmAj2VgO9w%2Bs8%2FGjKXIg3miG8bAeJD%2FMuySlrH07DRVrabS29M7n0TvygAu7v%5Cnu%2FyBJ%3A1662265008681; _iuqxldmzr_=32; _ntes_nnid=436bbe81760bd0ae30a01f6e24caa28d,1662263208720; _ntes_nuid=436bbe81760bd0ae30a01f6e24caa28d; NMTID=00O8_pjq23wu6pyV0MJv3_AsL7szbUAAAGDBpuwAQ; WEVNSM=1.0.0; WNMCID=ewkcee.1662263208889.01.0; WM_NI=4dU%2BtUGD7aH5UzWsDgFPf31sBQF%2FN4o1TcWb1Kb8o5uAVFTOSeofAVek7%2Fag57gFBnN9sWe341igI5WCzI%2BvT6DmWkf6kR6PRdoIUT0qcIXh2LitOmnttkeaZVUQwVl7cjE%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee9abb52908f9ca6ae43f6ac8ba2d84a828f9eacc85df38ff789bc7ea789a6d4f22af0fea7c3b92af8bc9bccf75f859cf982cb3f97a69994c76d8690aad4b479828f8ad0cd40adef9c84d66af395aed9ee3fb79f9aa7d74591bba187c45ea7b5f9d0e46df7e9a9a7c1668ee7bdb8e839f8efa788cc3f959db6aaaa7e98ea8c8ed661a6eaa5b3b55c92bca1aad860f4afadaadb64f294a795ce67aeacbc8ce86b9a8a9bb2f65eb0e9ad8bc837e2a3; WM_TID=1PHzMm1NV9REEERUUAfFDhU904rfXi2p; playerid=56733425',
    'referer': 'https://music.163.com/',
    'content-type': 'text/html;charset=utf8',
}

上面这段代码为我自己的信息,根据自己的信息把上面替换

20240801113005720-image

可以看到这里的请求方式为get,所以为requests.get(url=url, headers=headers)发送HTTP GET请求并获取响应,然后用一个变量去接收信息,变量我这里定义为response,代码为

response = requests.get(url=url, headers=headers)

这里可以查看是否获取成功可以输出一下,用print(response),如果输出<Response [200]>表示请求成功

接下来发送数据之后还需要去接收数据,接收数据重新定义一个变量,我这里定义为html_data,代码为:

html_data = response.text

下面还需要去解析数据,解析数据这里使用正则表达式,模块为re,内置的模块,不需要去pip下载,直接导入即可,在import requests下面再新增一个import re

import re

然后f12用工具点击每首歌曲

20240801114104643-image

把每首歌曲的id及名字用正则表达式.*?匹配。匹配出来为<li><a href=”/song?id=.*?”>.*?</a></li>

20240801114521110-image

刚才获取到的数据为整个源码,用html_data接收数据了,需要在这个数据里面去查找,用re.findall查询,代码为

info_list = re.findall('<li><a href="/song\?id=(.*?)">(.*?)</a></li>', html_data)

这里遍历info_list中的每个歌曲信息,并构造歌曲的下载链接music_url,然后打印歌曲信息。使用requests.get()函数发送GET请求下载歌曲,并将响应的内容存储在music_data变量中。使用open()函数以二进制写入模式打开一个文件(文件名与歌曲名相同,后缀为.mp3),并将歌曲数据写入文件。

for music in info_list:
    music_url = f'http://music.163.com/song/media/outer/url?id={music[0]}'
    print(music)
    music_data = requests.get(music_url).content
    open(f'{music[1]}.mp3', mode='wb').write(music_data)

完整代码

运行效果:

20240801114946504-image

20240801115102873-image

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容