網易音樂歌曲下載程式碼
阿新 • • 發佈:2018-12-27
剛剛寫了一堆,最終放棄了,後來百度查詢到一個介面,
http://music.163.com/song/media/outer/url?id=這裡填歌曲id.mp3
這個URL就可以下載了,現在再來做一次!根據歌單id下載歌曲
import os import re import requests from scrapy.selector import Selector class wangyiyun(): def __init__(self): self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Referer': 'http://music.163.com/'} self.main_url = 'http://music.163.com/' # session例項化物件 self.session = requests.Session() self.session.headers = self.headers def get_resp(self, url): """傳送url請求,返回響應內容""" # 傳送請求,獲取響應 resp = self.session.get(url) # 直接用session進入網頁 # 返回響應內容 return resp.content def get_songurls(self, playlist): '''進入所選歌單頁面,得出歌單裡每首歌各自的ID 形式就是“song?id=64006"''' url = self.main_url + 'playlist?id=%d' % playlist # 獲取內容 content = self.get_resp(url) # Scrapy選擇器是Selector通過傳遞文字或TextResponse物件構造的類的例項。 # 根據輸入型別自動選擇最佳的解析規則(XML與HTML) sel = Selector(text=content) # 用scrapy的Selector songurls = sel.xpath('//ul[@class="f-hide"]/li/a/@href').extract() return songurls # 所有歌曲組成的list def get_songinfo(self, songurl): '''根據songid進入每首歌資訊的網址,得到歌曲的資訊''' url = self.main_url + songurl # 傳送請求,獲取響應 resp = self.session.get(url) # 解析響應內容 sel = Selector(text=resp.text) # 獲取song_id song_id = url.split('=')[1] # 獲取song_name song_name = sel.xpath("//em[@class='f-ff2']/text()").extract_first() # 獲取singer singer = '&'.join(sel.xpath("//p[@class='des s-fc4']/span/a/text()").extract()) # 組裝songname songname = singer + '-' + song_name # 返回 return str(song_id), songname def download_song(self, song_url, songname, dir_path): '''根據歌曲url,下載mp3檔案''' # 檔名中不能含有特殊字元 songname = re.sub(r"[
[email protected]#$%^&*()]", "", songname) # os.sep相當於 “//” path = dir_path + os.sep + songname + '.mp3' # 檔案路徑 # 獲取內容 content = self.get_resp(song_url) # 儲存到本地 with open(path, "wb") as f: f.write(content) print(songname, "下載完畢!") def work(self, playlist): # 輸入歌單編號,得到歌單所有歌曲的url songurls = self.get_songurls(playlist) # 指定歌曲存放位置 dir_path = r'./music' # 遍歷下載歌單中所有歌曲 for songurl in songurls: # 根據歌曲url得出ID、歌名 song_id, songname = self.get_songinfo(songurl) # 拼接下載歌曲的url song_url = 'http://music.163.com/song/media/outer/url?id=%s.mp3' % song_id # 下載歌曲 self.download_song(song_url, songname, dir_path) if __name__ == '__main__': d = wangyiyun() d.work(2507752720) # 歌單id
簡單到爆。。。。
敲黑板。。。
還記得曾經用爬蟲獲得網易雲所有歌單嗎?其中就包括歌單url呦
網址送給你:https://blog.csdn.net/apollo_miracle/article/details/85015152