Python爬蟲音頻數(shù)據(jù)
一:前言
本次爬取的是喜馬拉雅的熱門欄目下全部電臺的每個頻道的信息和頻道中的每個音頻數(shù)據(jù)的各種信息,然后把爬取的數(shù)據(jù)保存到mongodb以備后續(xù)使用。這次數(shù)據(jù)量在70萬左右。音頻數(shù)據(jù)包括音頻下載地址,頻道信息,簡介等等,非常多。
昨天進行了人生中***次面試,對方是一家人工智能大數(shù)據(jù)公司,我準備在這大二的暑假去實習,他們就要求有爬取過音頻數(shù)據(jù),所以我就來分析一下喜馬拉雅的音頻數(shù)據(jù)爬下來。目前我還在等待三面中,或者是通知最終面試消息。 (因為能得到一定肯定,不管成功與否都很開心)
二:運行環(huán)境
- IDE:Pycharm 2017
- Python3.6
- pymongo 3.4.0
- requests 2.14.2
- lxml 3.7.2
- BeautifulSoup 4.5.3
三:實例分析
1.首先進入這次爬取的主頁面 http://www.ximalaya.com/dq/all/ ,可以看到每頁12個頻道,每個頻道下面有很多的音頻,有的頻道中還有很多分頁。抓取計劃:循環(huán)84個頁面,對每個頁面解析后抓取每個頻道的名稱,圖片鏈接,頻道鏈接保存到mongodb。
熱門頻道
2.打開開發(fā)者模式,分析頁面,很快就可以得到想要的數(shù)據(jù)的位置。下面的代碼就實現(xiàn)了抓取全部熱門頻道的信息,就可以保存到mongodb中。
分析頻道
3.下面就是開始獲取每個頻道中的全部音頻數(shù)據(jù)了,前面通過解析頁面獲取到了美國頻道的鏈接。
比如我們進入 http://www.ximalaya.com/6565682/album/237771 這個鏈接后分析頁面結(jié)構(gòu)??梢钥闯雒總€音頻都有特定的ID,這個ID可以在一個div中的屬性中獲取。使用split()和int()來轉(zhuǎn)換為單獨的ID。
頻道頁面分析
4.接著點擊一個音頻鏈接,進入開發(fā)者模式后刷新頁面然后點擊XHR,再點擊一個json鏈接可以看到這個就包括這個音頻的全部詳細信息。
音頻頁面分析
5.上面只是對一個頻道的主頁面解析全部音頻信息,但是實際上頻道的音頻鏈接是有很多分頁的。
分頁
6.全部代碼
完整代碼地址 github.com/rieuse/learnPython
7.如果改成異步的形式可以快一點,只需要修改成下面這樣就行了。我試了每分鐘要比普通的多獲取近100條數(shù)據(jù)。這個源代碼也在github中。
異步
五:總結(jié)
這次抓取的數(shù)據(jù)量在70萬左右,這些數(shù)據(jù)后續(xù)可以進行很多研究,比如播放量排行榜、時間區(qū)段排行、頻道音頻數(shù)量等等。后續(xù)我將繼續(xù)學習使用科學計算和繪圖工具來進行數(shù)據(jù)分析,清洗的工作。