喜歡的喜馬拉雅音頻文件需要VIP下載?Python 爬蟲帶你破解

學(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)行代碼即可税手。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜂筹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冈止,更是在濱河造成了極大的恐慌狂票,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熙暴,死亡現(xiàn)場(chǎng)離奇詭異闺属,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)周霉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門掂器,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人俱箱,你說我怎么就攤上這事国瓮。” “怎么了狞谱?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵乃摹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我跟衅,道長(zhǎng)孵睬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任伶跷,我火速辦了婚禮掰读,結(jié)果婚禮上秘狞,老公的妹妹穿的比我還像新娘。我一直安慰自己蹈集,他們只是感情好烁试,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拢肆,像睡著了一般减响。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上善榛,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天辩蛋,我揣著相機(jī)與錄音呻畸,去河邊找鬼移盆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伤为,可吹牛的內(nèi)容都是我干的咒循。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼绞愚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼叙甸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起位衩,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裆蒸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糖驴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僚祷,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年贮缕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辙谜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡感昼,死狀恐怖装哆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情定嗓,我是刑警寧澤蜕琴,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站宵溅,受9級(jí)特大地震影響凌简,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜层玲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一号醉、第九天 我趴在偏房一處隱蔽的房頂上張望反症。 院中可真熱鬧,春花似錦畔派、人聲如沸铅碍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胞谈。三九已至,卻和暖如春憨愉,著一層夾襖步出監(jiān)牢的瞬間烦绳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工配紫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留径密,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓躺孝,卻偏偏與公主長(zhǎng)得像享扔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子植袍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容