天天看點

Python爬蟲音頻資料

一:前言

本次爬取的是喜馬拉雅的熱門欄目下全部電台的每個頻道的資訊和頻道中的每個音頻資料的各種資訊,然後把爬取的資料儲存到mongodb以備後續使用。這次資料量在70萬左右。音頻資料包括音頻下載下傳位址,頻道資訊,簡介等等,非常多。

昨天進行了人生中第一次面試,對方是一家人工智能大資料公司,我準備在這大二的暑假去實習,他們就要求有爬取過音頻資料,是以我就來分析一下喜馬拉雅的音頻資料爬下來。目前我還在等待三面中,或者是通知最終面試消息。 (因為能得到一定肯定,不管成功與否都很開心)

二:運作環境

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個頻道,每個頻道下面有很多的音頻,有的頻道中還有很多分頁。抓取計劃:循環84個頁面,對每個頁面解析後抓取每個頻道的名稱,圖檔連結,頻道連結儲存到mongodb。

Python爬蟲音頻資料

熱門頻道

2.打開開發者模式,分析頁面,很快就可以得到想要的資料的位置。下面的代碼就實作了抓取全部熱門頻道的資訊,就可以儲存到mongodb中。

Python爬蟲音頻資料
Python爬蟲音頻資料

分析頻道

3.下面就是開始擷取每個頻道中的全部音頻資料了,前面通過解析頁面擷取到了美國頻道的連結。

比如我們進入 http://www.ximalaya.com/6565682/album/237771 這個連結後分析頁面結構。可以看出每個音頻都有特定的id,這個id可以在一個div中的屬性中擷取。使用split()和int()來轉換為單獨的id。

Python爬蟲音頻資料

頻道頁面分析

4.接着點選一個音頻連結,進入開發者模式後重新整理頁面然後點選xhr,再點選一個json連結可以看到這個就包括這個音頻的全部詳細資訊。

Python爬蟲音頻資料
Python爬蟲音頻資料

音頻頁面分析

5.上面隻是對一個頻道的首頁面解析全部音頻資訊,但是實際上頻道的音頻連結是有很多分頁的。

Python爬蟲音頻資料
Python爬蟲音頻資料

分頁

6.全部代碼

完整代碼位址 github.com/rieuse/learnpython

Python爬蟲音頻資料

7.如果改成異步的形式可以快一點,隻需要修改成下面這樣就行了。我試了每分鐘要比普通的多擷取近100條資料。這個源代碼也在github中。

Python爬蟲音頻資料

異步

五:總結

這次抓取的資料量在70萬左右,這些資料後續可以進行很多研究,比如播放量排行榜、時間區段排行、頻道音頻數量等等。後續我将繼續學習使用科學計算和繪圖工具來進行資料分析,清洗的工作。

作者:狙擊手

來源:51cto