僅供學習參考html
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-八、gbk、gbk2312等解碼也是亂碼。應該客戶端拿到數據是加密的,我沒有找到其解密方式。只能使用模擬網頁請求拿取歌單前面10首歌曲。
如有好的想法,能夠一塊兒探討。
代碼寫於:2020.8.23ui
③要下載熱歌榜全部歌曲,請查看我前一個發佈內容加密
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