摘要:完整代碼如下正在下載根據(jù)網(wǎng)易云歌曲的直接下載歌曲上安裝爬取網(wǎng)易云歌曲源碼地址
首發(fā)知乎:https://zhuanlan.zhihu.com/p/...
目標(biāo)偶然的一次機會聽到了房東的貓的《云煙成雨》,瞬間迷上了這慵懶的嗓音和學(xué)生氣的歌詞,然后一直去循環(huán)聽她們的歌。然后還特意去刷了動漫《我是江小白》,好期待第二季...
我多想在見你,哪怕匆匆一眼就別離...
好了,不說廢話了。這次的目標(biāo)主要是根據(jù)網(wǎng)易云中歌手的ID,下載該歌手的熱門音樂的歌詞和音頻,并保存到本地的文件夾中。
配置基礎(chǔ)Python
Selenium(配置方法參照:Selenium配置)
Chrome瀏覽器(其它的也可以,需要進行相應(yīng)的修改)
分析如果爬取過網(wǎng)易云的網(wǎng)站的小伙伴都應(yīng)該知道網(wǎng)易云是有反爬取機制的,POST時需要對一些信息的參數(shù)進行加密函數(shù)的模擬。但是這里為了簡便,小白也能理解。直接使用了Selenium來模擬登錄,然后使用接口來直接下載音樂和歌詞。
實驗步驟:
根據(jù)歌手ID獲取該歌手的熱門歌曲列表,歌曲名稱和鏈接,并保存到csv文件中;
讀取csv文件,根據(jù)歌曲鏈接,提取歌曲ID,然后利用相應(yīng)的接口,下載音樂和歌詞;
將音樂和歌詞保存到本地。
Python實現(xiàn)該部分將對幾個關(guān)鍵的函數(shù)進行介紹...
獲取歌手信息利用Selenium我們就不需要看對網(wǎng)頁的請求了,直接可以從網(wǎng)頁源碼中提取相應(yīng)的信息。查看歌手頁面源碼可以發(fā)現(xiàn),我們需要的信息在iframe框架內(nèi),所以我們先需要切換到iframe:
browser.switch_to.frame("contentFrame")
繼續(xù)往下看,發(fā)現(xiàn)我們需要的歌曲名字和鏈接是在id="hotsong-list"的標(biāo)簽中,然后每一行對應(yīng)的是一個tr標(biāo)簽。所以先獲取所有的tr內(nèi)容,然后遍歷單個tr。
data = browser.find_element_by_id("hotsong-list").find_elements_by_tag_name("tr")
注意:前一個是find_element,后一個是find_elements,后者返回一個列表。
接下來就是解析單個tr標(biāo)簽的內(nèi)容,獲取歌曲名字和鏈接,可以發(fā)現(xiàn)兩者在class="txt"標(biāo)簽中,而且鏈接是href屬性,名字是title屬性,可以直接通過get_attribute()函數(shù)獲取。
for i in range(len(data)): content = data[i].find_element_by_class_name("txt") href = content.find_element_by_tag_name("a").get_attribute("href") title = content.find_element_by_tag_name("b").get_attribute("title") song_info.append((title, href))
網(wǎng)易云有個獲取歌詞的接口,鏈接為:http://music.163.com/api/song...
鏈接中的數(shù)字就是歌曲的id,所以我們擁有歌曲id后,可以直接從該鏈接下載歌詞,歌詞文件是json格式,所以我們需要用到json包。
而且直接獲取的歌詞中,每行有一個時間軸,需要用正則表達(dá)式來剔除,完整代碼如下:
def get_lyric(self): url = "http://music.163.com/api/song/lyric?" + "id=" + str(self.song_id) + "&lv=1&kv=1&tv=-1" r = requests.get(url) json_obj = r.text j = json.loads(json_obj) lyric = j["lrc"]["lyric"] # 利用正則表達(dá)式去除時間軸 regex = re.compile(r"[.*]") final_lyric = re.sub(regex, "", lyric) return final_lyric
網(wǎng)易云也提供了音頻文件的接口,鏈接為:http://music.163.com/song/med...
鏈接中的數(shù)字為歌曲的id,可以直接根據(jù)歌曲的id來下載音頻文件。完整代碼如下:
def get_mp3(self): url = "http://music.163.com/song/media/outer/url?id=" + str(self.song_id)+".mp3" try: print("正在下載:{0}".format(self.song_name)) urllib.request.urlretrieve(url, "{0}/{1}.mp3".format(self.path, self.song_name)) print("Finish...") except: print("Fail...")
python 根據(jù)網(wǎng)易云歌曲的ID 直接下載歌曲
Windows上安裝Selenium爬取網(wǎng)易云歌曲
源碼地址Github:Link
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42307.html
摘要:機器學(xué)習(xí)的過程機器學(xué)習(xí)的流程可以概括為幾大部分,分別是設(shè)置數(shù)據(jù)集劃分訓(xùn)練集和測試集構(gòu)建計算網(wǎng)絡(luò)訓(xùn)練模型測試模型以及其他一些環(huán)節(jié)。機器學(xué)習(xí)在某些時候,很接近于線性回歸,而這個庫很適合用來創(chuàng)建大量的數(shù)字集合。 網(wǎng)上關(guān)于機器學(xué)習(xí)的文章,視頻不計其數(shù),本來寫這么一篇東西,我自己也覺得有點多余,但是我還真沒找到一個能幫助像我這樣零基礎(chǔ)的人,快速接觸和上手機器學(xué)習(xí)的文章。這篇文章不能讓你深入學(xué)習(xí)和...
摘要:在這之前,還是有必要對一些概念超輕量級反爬蟲方案后端掘金前言爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲修煉之道——從網(wǎng)頁中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲修煉之道 上篇 爬蟲修煉之道——編寫一個爬取多頁面的網(wǎng)絡(luò)爬蟲主要講解了如何使用python編寫一個可以下載多頁面的爬蟲,如何將相對URL轉(zhuǎn)為絕對URL,如何限速,...
摘要:爬蟲之網(wǎng)易云音樂下載目標(biāo)用根據(jù)網(wǎng)易云音樂的,下載音樂,保存到本地格式可以下載歌曲的范圍所有能夠聽的歌曲配置基礎(chǔ)模塊可選可選這是哈希函數(shù)如和和各種加密算法,,,等的集合。 Python爬蟲之網(wǎng)易云音樂下載 目標(biāo) 用Python根據(jù)網(wǎng)易云音樂的ID,下載音樂,保存到本地MP3格式 可以下載歌曲的范圍:所有能夠聽的歌曲 配置基礎(chǔ) Python 3.5 模塊 pycrypto base64 ...
摘要:我最開始學(xué)習(xí)編程的時候也是如此,摸索了非常久的時間,才慢慢找到自己高效學(xué)習(xí)方法。被動的學(xué)習(xí)方式聽講閱讀視聽演示,只能讓你做到內(nèi)容留存率的和的知識。而主動的學(xué)習(xí)方式,如通過討論實踐教授給他人,會將原來被動學(xué)習(xí)的內(nèi)容留存率從提升到和。 showImg(https://segmentfault.com/img/remote/1460000016856679); 閱讀文本大概需要 7 分鐘。 ...
閱讀 2958·2023-04-26 01:52
閱讀 3485·2021-09-04 16:40
閱讀 3641·2021-08-31 09:41
閱讀 1783·2021-08-09 13:41
閱讀 578·2019-08-30 15:54
閱讀 2972·2019-08-30 11:22
閱讀 1627·2019-08-30 10:52
閱讀 958·2019-08-29 13:24