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