1. 程式人生 > 實用技巧 >Python 爬取網易雲歌手的50首熱門作品

Python 爬取網易雲歌手的50首熱門作品

使用requests爬取網易雲音樂

Python程式碼:

import json
import os
import time

from bs4 import BeautifulSoup
import requests


class Music:
    """
    下載網易雲歌手排行前50的歌曲
    """

    def __init__(self, init_url, download):
        self.init_url = init_url
        self.download = download

    def mkdir(self, path):
        
""" 建立資料夾 :param path: :return: """ path = path.strip() if not os.path.exists(path): # 判斷此資料夾存不存在 print('建立 ', path, '資料夾') os.makedirs(path) return True else: print(path, '資料夾已存在,無需建立')
return False def download_video(self, video_url, name): """ 下載 :param video_url: 音樂的連結 :param name: 歌曲名稱 :return: """ path = self.download + "\\" + name + '.mp3' # 拼接儲存後的檔案路徑 # print(path) headers = { "User-Agent
": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36", } header = { "Origin": "http://music.163.com/", "Referer": video_url, # 請求頭必須新增referer } headers.update(header) # 更新頭部資訊 size = 0 start = time.time() try: result = requests.get(video_url, headers=headers, stream=True, verify=False) # print('result', result) with open(path, "wb") as f: for chunk in result.iter_content(1024): f.write(chunk) f.flush() # 清空快取 size = size + len(chunk) print("已下載:%0.2f Mb" % (size / (1024 * 1024))) except Exception as e: print("url下載錯誤:%s" % video_url) print(e) stop = time.time() print("下載完成,耗時:%0.2f秒" % (stop - start)) def spider(self): r = requests.get(self.init_url).text soupObj = BeautifulSoup(r, 'lxml') song_ids = soupObj.find('textarea').text # print(song_ids) jobj = json.loads(song_ids) list01 = [] for item in jobj: dict01 = {} # print(item['id']) # 歌曲id # print(item['name']) # 歌曲名稱 dict01['name'] = item['name'] dict01['id'] = item['id'] list01.append(dict01) print(list01) len_list = len(list01) print("一共", len_list, "首歌曲") self.mkdir(self.download) print('開始切換資料夾') os.chdir(self.download) for i in list01: name = i['name'] id = i['id'] song_url = "http://music.163.com/song/media/outer/url?id=" + str(id) + ".mp3" print(song_url) # 最終下載的音樂連結 self.download_video(song_url, name) # 下載 len_list = len_list - 1 print("還剩", len_list, "首歌曲需要下載") if __name__ == '__main__': # init_url = 'https://music.163.com/artist?id=5781' # 薛之謙 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\xzq' # 儲存地址 # init_url = 'https://music.163.com/artist?id=12429072' # 隔壁老樊 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\gblf' # 儲存地址 # init_url = 'https://music.163.com/artist?id=861777' # 華晨宇 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\hcy' # 儲存地址 # init_url = 'https://music.163.com/artist?id=6452' # 周杰倫 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\zjl' # 儲存地址 # init_url = 'https://music.163.com/artist?id=2116' # 陳奕迅 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\cyx' # 儲存地址 # init_url = 'https://music.163.com/artist?id=3684' # 林俊杰 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\ljj' # 儲存地址 # init_url = 'https://music.163.com/artist?id=12138269' # 毛不易 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\mby' # 儲存地址 # init_url = 'https://music.163.com/artist?id=4292' # 李榮浩 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\lrh' # 儲存地址 # init_url = 'https://music.163.com/artist?id=30116848' # 阿冗 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\ar' # 儲存地址 # init_url = 'https://music.163.com/artist?id=5771' # 許嵩 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\xs' # 儲存地址 # init_url = 'https://music.163.com/artist?id=6472' # 張傑 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\zj' # 儲存地址 # init_url = 'https://music.163.com/artist?id=5538' # 汪蘇瀧 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\wsl' # 儲存地址 # init_url = 'https://music.163.com/artist?id=1197168' # 徐秉龍 # download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\xbl' # 儲存地址 init_url = 'https://music.163.com/artist?id=30284835' # 枯木逢春 download = 'C:\\Users\\AIERXUAN\\Desktop\\BeautifulPicture\\Music\\kmfc' # 儲存地址 s = Music(init_url, download) s.spider()
View Code
"http://music.163.com/song/media/outer/url?id=417859631.mp3"  開啟這個連結就可以直接播放音樂   後面的id代表的是歌曲在網易雲裡面的id

由於網易雲有的音樂連結已經棄用,所以有的音樂會下載失敗

網易雲的許多post請求都是被加密的,如果你們破解不了可以點選這個連結去看看大佬是怎麼破解的:https://blog.csdn.net/xiaoming_xiaoli/article/details/88019016

關於網易雲api的其他介面可以進去這裡面檢視:http://www.goodpm.net/postreply/python/1010000008139311/關於網易雲音樂爬蟲的api介面.html

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

每天一個表情包,給生活加個油