当前位置: 首页 > news >正文

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

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

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

视频版教程:Python爬虫实战-批量爬取下载网易云音乐icon-default.png?t=N7T8https://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音乐下载不了)

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

"""思路: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 BeautifulSoupheaders = {'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_idmusic = 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)# 获取歌曲IDsong_id = song['href'].split("=")[1]# 下载歌曲download_song(song_name, song_id)

http://www.lryc.cn/news/219067.html

相关文章:

  • LeetCode 面试题 16.14. 最佳直线
  • Spring Boot创建多模块项目
  • Node.js、Chrome V8 引擎、非阻塞式I/O介绍
  • 企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?
  • NLP之LSTM原理剖析
  • ESP32网络开发实例-Web方式配置WiFi连接
  • ElasticSearch 批量插入漏数据
  • C++——类和对象之运算符重载
  • 第二阶段第一章——面向对象
  • Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用
  • 解决Visual Studio 2010 运行时屏幕一闪而过,无结果显示的问题
  • C++(20):为[[nodiscard]]提供提示信息
  • hi3518ev200 从sd卡启动rootfs
  • [BUUCTF NewStar 2023] week5 Crypto/pwn
  • 使用seldom编写http接口用例
  • Redis中Hash类型的命令
  • Java 函数式编程
  • 类的成员函数总结
  • java高级之单元测试、反射
  • MSQL系列(十三) Mysql实战-left/right/inner join 使用详解及索引优化
  • 前端面试题之HTML篇
  • Django ORM:数据库操作的Python化艺术
  • react受控组件与非受控组件
  • 小米产品面试题:淘宝为何需要确认收货?京东为何不需要?
  • (1)上位机底部栏 UI如何设置
  • 中国多主数据库:压强投入,期待破茧
  • JavaScript在ES6及后续新增的常用新特性
  • 试试流量回放,不用人工写自动化测试case了
  • 密钥管理系统功能及作用简介 安当加密
  • vue中watch属性的用法