學(xué)習(xí)硝全,是一個(gè)長(zhǎng)期的過程栖雾。學(xué)習(xí)的方式也是有很多種的,在家里時(shí)間有空閑時(shí)間的話可以選擇讀書伟众,如今在手機(jī)上看電子書也方便析藕。最近看電子書比較多,感覺自己的視力明顯下降了凳厢。停下來不學(xué)習(xí)又不行账胧,我想到用聽的方式去學(xué)習(xí),如今各平臺(tái)上音頻文件還是比較豐富的先紫。大家聽得比較多的應(yīng)該就是喜馬拉雅這個(gè)平臺(tái)了治泥。今天我用 Python 把喜馬拉雅的音頻通過輸入關(guān)鍵字查詢出來并下載保存在本地。
保存效果
我通過「騰訊傳」關(guān)鍵字查詢出 6 個(gè)音頻專輯泡孩,以下為其中一個(gè)專輯里的 7 個(gè)音頻文件车摄。
項(xiàng)目環(huán)境
語(yǔ)言:Python3
編輯器:Pycharm
程序結(jié)構(gòu)
程序主要由四部分組成:
gethtml():提取頁(yè)面 html 信息。
getid():獲取通過關(guān)鍵字搜索的音頻專輯 ID 列表仑鸥。
downm4a():下載對(duì)應(yīng)專輯 ID 下的音頻文件吮播。
mkdir():把下載的音頻保存到相應(yīng)的文件夾中。
頁(yè)面分析
我們要下載音頻文件眼俊,首先我們得要找到下載音頻的 url意狠,我們打開瀏覽器自帶的調(diào)試工具(我用的是 Chrome),通過快捷鍵 F12 可快速打開調(diào)試工具疮胖。調(diào)試器切到 Network环戈,我以我最近剛看完的「騰訊傳」為例,點(diǎn)擊專輯封面中間的播放按鈕澎灸,該專輯中音頻信息中都在 json 格式的數(shù)據(jù)中院塞。一共有 7 個(gè)音頻文件.
任意展開一個(gè)音頻的詳細(xì)信息,詳細(xì)信息包括了音頻文件的標(biāo)題和下載鏈接性昭。找到了音頻的下載鏈接就可以下載音頻了拦止,接下來的工作的都圍繞怎么獲取音頻文件的下載鏈接展開。
獲取頁(yè)面源碼
我們先定義一個(gè)獲取頁(yè)面 html 信息的函數(shù)糜颠。該函數(shù)中加入瀏覽器表頭信息 headers汹族,為了安全起見,用的是代理 IP其兴,有興趣的可以自己做個(gè) IP 代理池顶瞒,IP 失效后自動(dòng)替換。
獲取專輯信息
接下來我們需要獲取專輯的 ID元旬,因?yàn)橐纛l的下載鏈接是通過專輯 ID 拼接的榴徐,我們看下剛才包含音頻文件名稱和下載鏈接信息的 Headers守问,可看到專輯鏈接的組成中 albumId 就是專輯 ID,后面的表示當(dāng)前頁(yè)面數(shù)和頁(yè)面最多存放的音頻數(shù)箕速。
專輯的 ID 信息包含在通過關(guān)鍵字搜索的信息里面酪碘。
通過 BeautifulSoup 在頁(yè)面中提取專輯的 ID 信息朋譬,順便也把專輯標(biāo)題信息提取出來盐茎,當(dāng)做等下創(chuàng)建專輯目錄的名稱,主要代碼如下徙赢。
獲取頁(yè)面數(shù)
上面的方法獲取專輯 ID 信息字柠,接下來我們需要知道專輯下共用多少頁(yè)的音頻文件,我們通過音頻總數(shù)除以 30 來獲取頁(yè)面數(shù)量狡赐。音頻總數(shù)的信息在音頻文件列表的 data 里面窑业,下圖我用了音頻文件數(shù)量比較多「明朝那些事兒」舉例,一共 268 個(gè)音頻文件枕屉。
有了音頻總數(shù)常柄,每頁(yè)的音頻數(shù)量是 30 個(gè),這樣我們就可以算出頁(yè)面的數(shù)量了搀擂,分為 3 種情況判斷:總數(shù)小于或等于 30 個(gè)西潘、總數(shù)大于 30 個(gè)且是 30 的倍數(shù)、總數(shù)大于 30 個(gè)且不是 30 的倍數(shù)哨颂,相關(guān)代碼如下喷市。
下載音頻文件
專輯 ID、專輯名稱威恼、頁(yè)面數(shù)量都有了品姓,接下來就可以下載音頻文件了。下載音頻時(shí)箫措,當(dāng)音頻不足 30 個(gè)腹备,需要做下異常處理。當(dāng)音頻文件是付費(fèi)文件時(shí)斤蔓,無法下載植酥。這時(shí)做一個(gè)判斷,音頻的下載鏈接為 null 或者 None 時(shí)附迷,跳出循環(huán)去爬取下一個(gè)專輯的文件惧互。
音頻的下載鏈接為 null 或者 None 的情況,這里以「明朝那些事兒」為例喇伯,通過「明朝那些事兒」關(guān)鍵字爬取的其中一個(gè)專輯的音頻文件喊儡,總共只爬取了 50 個(gè),后面的音頻文件都沒有提供下載鏈接稻据,所以無法下載艾猜。
建立目錄存放音頻
為了讓下載下來的音頻文件有序的存放在以專輯名稱命名的文件夾下买喧,我們用代碼自動(dòng)創(chuàng)建目錄并把對(duì)應(yīng)文件下載到該目錄下。
后記
本文的目的是把喜馬拉雅上免費(fèi)的音頻下載到本地匆赃,傳到手機(jī)里淤毛,方面大家保護(hù)視力的情況下隨時(shí)都可以學(xué)習(xí)。當(dāng)然算柳,流量充足的也可以在 APP 上在線聽低淡。
此項(xiàng)目是通過輸入關(guān)鍵字去搜索音頻專輯下載的,對(duì)于有些關(guān)鍵字沒有對(duì)應(yīng)音頻的情況下瞬项,系統(tǒng)會(huì)把推薦音頻給你蔗蹋,所以為了提高大家的效率,大家運(yùn)行代碼前囱淋,先在喜馬拉雅網(wǎng)站輸入你需要搜索的關(guān)鍵字猪杭,看是否有相關(guān)的音頻,有的話再運(yùn)行代碼妥衣。一般熱度比較高的音頻專輯都比較靠前皂吮,下載了自己需要的音頻專輯后,如果后面的專輯不需要停止運(yùn)行代碼即可税手。