網易雲音樂評論爬蟲(1):全部熱門歌曲及其 id 號

發表於2018-10-10

今天我給大家介紹一下用Python爬取網易雲音樂全部歌手的熱門歌曲.由於歌手個人主頁的網頁原始碼中還嵌入了一個子網頁(框架原始碼裡面包含了我們需要的資訊),因此我們不能使用requests庫來爬取,而使用selenium,接下來,讓我詳細講解整個爬取過程.

一,構造歌手個人主頁的URL

前段時間我們獲取了網易雲音樂全部歌手的id號,今天我們就利用全部歌手的id號來構造歌手個人主頁的URL,從而實現用爬取全部歌手的熱門歌曲及其id號的目的.以歌手 薛之謙的個人主頁 為例,來看一下他的主頁的URL為:

因此只需要根據歌手對應的id就可以構造出歌手的個人主頁,在歌手的個人主頁我們能看到熱門作品這一欄.網易雲音樂全部歌手id號點選獲取(csv檔案)

二,分析網頁原始碼

現在我們就要用Python爬蟲去爬取這些內容.如果你用requests庫去爬取的話,返回的網頁原始碼中根本就沒有這些資訊.這時我們開啟薛之謙的個人主頁滑鼠右鍵分別檢視網頁的原始碼和檢視框架的原始碼.你會發現網頁原始碼和用requests庫請求返回的原始碼一摸一樣(裡面沒有我們要爬取的資訊),而在框架原始碼中有我們要爬取的熱門作品的資訊,因此我們只需要將框架原始碼爬取下來,然後再解析即可得到我們需要的歌手的熱門作品的資訊.

三,網頁原始碼和框架原始碼的區別

網頁原始碼是指父級網頁的原始碼.另外網頁中還有一種節點叫iframe,也就是子Frame,相當於網頁的子頁面,它的結構和外部網頁的結構完全一致,框架原始碼就是這個子網頁的原始碼.

四,獲取框架原始碼

這裡我們使用selenium庫來爬取,在selenium開啟頁面後,預設是在父級frame裡面進行操作,而此時頁面中還有子frame,它是不能獲取到子frame裡面的節點的,因此這時我們需要使用swith_to.frame()方法來切換到子frame中去,這時請求得到的程式碼就從網頁原始碼切換到了框架原始碼,於是我們便能夠提取我們需要的熱門作品的資訊了.通過歌手的個人主頁的URL來爬取其框架原始碼,具體爬取框架原始碼的函式:

返回結果為歌手個人主頁的框架原始碼,裡面包含了我們需要的資訊.

五,解析原始碼

我們使用bs4庫進行解析,需要的資訊包含在HTML5的下面程式碼片段中:

因此可定義下面函式對其進行解析:

 六,寫入csv檔案

 七,讀取csv檔案,構造全部歌手的個人主頁

 八,程式主函式

 九,總結

獲取全部程式碼請上我的github,爬取過程中有任何問題歡迎留言!

作者簡介:志穎,一個狂熱的 python 爬蟲愛好者。

相關文章