Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

編程語言 Python 網絡爬蟲 NoSQL 布咯咯 2017-06-19

一:前言

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. 首先進入這次爬取的主頁面 www.ximalaya.com/dq/all/ ,可以看到每頁12個頻道,每個頻道下面有很多的音頻,有的頻道中還有很多分頁。 抓取計劃:循環84個頁面,對每個頁面解析後抓取每個頻道的名稱,圖片鏈接,頻道鏈接保存到mongodb。

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

2.打開開發者模式,分析頁面,很快就可以得到想要的數據的位置。下面的代碼就實現了抓取全部熱門頻道的信息,就可以保存到mongodb中。

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

3.下面就是開始獲取每個頻道中的全部音頻數據了,前面通過解析頁面獲取到了美國頻道的鏈接。比如我們進入www.ximalaya.com/6565682/album/237771 這個鏈接後分析頁面結構。可以看出每個音頻都有特定的ID,這個ID可以在一個div中的屬性中獲取。

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

4.接著點擊一個音頻鏈接,進入開發者模式後刷新頁面然後點擊XHR,再點擊一個json鏈接可以看到這個就包括這個音頻的全部詳細信息。

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據
Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

5.上面只是對一個頻道的主頁面解析全部音頻信息,但是實際上頻道的音頻鏈接是有很多分頁的。

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

6.全部代碼

完整代碼地址github.com/rieuse/learnPython

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

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

Python爬蟲:大規模爬取喜馬拉雅電臺詳細音頻數據

五:總結

這次抓取的數據量很多,後續可以進行很多研究。比如播放量排行榜,時間區段排行,等等。後續我繼續學習跟進。

貼出我的github地址,我的爬蟲代碼和學習的基礎部分都放進去了,有喜歡的朋友可以點擊 start follw一起學習交流吧!github.com/rieuse/learnPython

相關推薦

推薦中...