1. 程式人生 > >網易音樂歌曲下載程式碼

網易音樂歌曲下載程式碼

剛剛寫了一堆,最終放棄了,後來百度查詢到一個介面,

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