Python爬取网易云音乐歌手歌曲和歌单
仅供学习参考
Python爬取网易云音乐网易云音乐歌手歌曲和歌单,并下载到本地
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771
①找到要下载歌手歌曲的链接,这里用的是:
https://music.163.com/#/artist?id=10559
要提前建好保存文件夹:path1 = "D:/360下载/网易云音乐/1/"
然后更改你要保存的目录,目录要先建立好文件夹,例如我的是保存在D盘-360下载-网易云音乐-1文件夹内,就可以完成下载。如果文件夹没有提前建好,会报错[Errno 2] No such file or directory。
②找到要下载歌单的链接,这里用的是:
https://music.163.com/#/playlist?id=5175828159
要提前建好保存文件夹:path2 = "D:/360下载/网易云音乐/2/"
只能下载前面10首。
之后的歌曲信息服务器不给数据,无法拿到歌曲id。
我尝试使用网易云音乐PC端(可以加载歌单所有歌曲),用fiddler进行抓包,是POST请求,通过模拟请求,得到的response是乱码,尝试utf-8、gbk、gbk2312等解码也是乱码。应该客户端拿到数据是加密的,我没有找到其解密方式。只能使用模拟网页请求拿取歌单前面10首歌曲。
若有好的想法,可以一起探讨。
代码写于:2020.8.23
③要下载热歌榜所有歌曲,请查看我前一个发布内容
from urllib import request
from bs4 import BeautifulSoup
import re
import requests
import time
class Music(object):
def __init__(self, baseurl, path):
head = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}
baseurl = baseurl.replace("#/", "")
self.baseurl = baseurl
self.headers = head
self.path = path
def main(self):
html = self.askurl()
bs4 = self.analysis(html)
id = self.matching(bs4)
self.save(id)
def askurl(self):
req = request.Request(url=self.baseurl, headers=self.headers)
response = request.urlopen(req)
html = response.read().decode("utf-8")
return html
def analysis(self, html):
soup = BeautifulSoup(html, "html.parser")
bs4 = soup.find_all("li")
bs4 = str(bs4)
return bs4
def matching(self, bs4):
rule = re.compile(r'href="/song\?id=(\d*?)"', re.S)
id = re.findall(rule, bs4)
return id
def save(self, id):
for i in id:
url = "https://music.163.com/song?id=" + i
req = request.Request(url=url, headers=self.headers)
response = request.urlopen(req)
html = response.read().decode("utf-8")
soup = BeautifulSoup(html, "html.parser")
bs4 = soup.find_all("title")
bs4 = str(bs4)
rule = re.compile(r'<title>(.*?) - (.*?) - 单曲 - 网易云音乐</title>', re.S)
name = re.findall(rule, bs4)
name = name[0]
singername = name[1].replace(r"/", "_")
print("正在下载:" + name[0] + " - " + singername + "……")
saveurl = "http://music.163.com/song/media/outer/url?id=" + i
content = requests.get(url=saveurl, headers=self.headers).content
with open(self.path + name[0] + " - " + singername + ".mp3", "wb") as f:
f.write(content)
print(name[0] + " - " + singername + "-----------下载完毕。")
time.sleep(1)
return
if __name__ == "__main__":
artisturl = "https://music.163.com/#/artist?id=10559" # 下载歌手歌曲的url
path1 = "D:/360下载/网易云音乐/1/" # 保存路径1
artist_demo = Music(artisturl, path1)
artist_demo.main()
playlisturl = "https://music.163.com/#/playlist?id=5175828159" # 下载歌单的url
path2 = "D:/360下载/网易云音乐/2/" # 保存路径2
playlist_demo = Music(playlisturl, path2)
playlist_demo.main()
print("\n全部歌曲下载完毕")
Python爬取网易云音乐歌手歌曲和歌单的更多相关文章
- 用Python爬取网易云音乐热评
用Python爬取网易云音乐热评 本文旨在记录Python爬虫实例:网易云热评下载 由于是从零开始,本文内容借鉴于各种网络资源,如有侵权请告知作者. 要看懂本文,需要具备一点点网络相关知识.不过没有关 ...
- python爬取网易云音乐歌曲评论信息
网易云音乐是广大网友喜闻乐见的音乐平台,区别于别的音乐平台的最大特点,除了“它比我还懂我的音乐喜好”.“小清新的界面设计”就是它独有的评论区了——————各种故事汇,各种金句频出.我们可以透过歌曲的评 ...
- python爬取网易云音乐歌单音乐
在网易云音乐中第一页歌单的url:http://music.163.com/#/discover/playlist/ 依次第二页:http://music.163.com/#/discover/pla ...
- 爬取网易云音乐歌手和id
pip install lxml csv requests from lxml import etree from time import sleep import csv import reques ...
- 如何用Python网络爬虫爬取网易云音乐歌曲
今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...
- python爬虫+词云图,爬取网易云音乐评论
又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...
- Python 爬取网易云歌手的50首热门作品
使用 requests 爬取网易云音乐 Python 代码: import json import os import time from bs4 import BeautifulSoup impor ...
- Python爬取网易云热歌榜所有音乐及其热评
获取特定歌曲热评: 首先,我们打开网易云网页版,击排行榜,然后点击左侧云音乐热歌榜,如图: 关于如何抓取指定的歌曲的热评,参考这篇文章,很详细,对小白很友好: 手把手教你用Python爬取网易云40万 ...
- python爬虫:了解JS加密爬取网易云音乐
python爬虫:了解JS加密爬取网易云音乐 前言 大家好,我是"持之以恒_liu",之所以起这个名字,就是希望我自己无论做什么事,只要一开始选择了,那么就要坚持到底,不管结果如何 ...
随机推荐
- github 错误
Push failed: Unable to access 'https://github.com/infoo/Neo4j.git/': The requested URL returned erro ...
- springboot 使用DruidDataSource 数据源
一.添加依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</art ...
- 文件权限和访问控制列表ACL (1)
背景知识: 文件的权限主要针对三类对象进行定义 Owner: 属主u Group: 属组g Other: 其他o 每个文件针对每一类的访问者都设定了三种权限 r: Readable 读 w: Writ ...
- 我还在生产玩 JDK7,JDK 15 却要来了!|新特性尝鲜
自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15. 恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 ...
- Python内置OS模块用法详解
大家好,从今天起早起Python将持续更新由小甜同学从初学者的角度学习Python的笔记,其特点就是全文大多由新手易理解的代码与注释及动态演示.刚入门的读者千万不要错过! 很多人学习python,不知 ...
- Java进阶知识
01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 第一章 Object类 1. ...
- java this关键字调用构造方法
一 this调用构造方法 构造方法之间的调用,可以通过this关键字来完成. 格式: this(参数列表); 构造方法的调用举例: class Person { // Person的成员属性 priv ...
- Vue 引入指定目录文件夹所有的组件 require.context
require.context require.context是webpack中用来管理依赖的一个函数,此方法会生成一个上下文模块,包含目录下所有的模块的引用,同构正则表达式匹配,然后require进 ...
- Vue watch对象属性并触发多个事件
在vue中监控一个对象的属性变化,并且触发监听事件 watch: { 'user': [ { handler: (nweVal, oldVal) => { console.info('in 1 ...
- Linux top详解
命令 top 参数说明: d:改变显示的更新速度 q: 没有任何延迟的显示速度 c:切换显示模式,共有两种模式,一是只显示执行档的名称,零一种显示完整的路径与名称S:累计模式,会将已完成或消失的子行 ...