1. 程式人生 > >爬取網易雲音樂“三部曲”(一):爬取歌手資訊!

爬取網易雲音樂“三部曲”(一):爬取歌手資訊!

提到歌神張學友,大家可能不會陌生或者說是如雷貫耳,他可是有著逃犯殺手之稱,這不明天1月11號是他2019世界巡迴演唱會《香港站》的開辦日期,不知香港警方有沒有做好抓逃犯的準備【手動滑稽】。對於歌神明天的演唱會,小編其實挺嚮往的,只是奈何年底了,天天要工作,作為一個程式猿,這也是沒辦法的,為了排遣內心的小波動,我打算用 Python 爬蟲寫一個爬取網易雲音樂的“三部曲”系列。先從基礎的爬取歌手的姓名的歌手 id ,之後根據 id 再爬蟲歌手名下的歌曲歌詞和歌曲評論。希望能夠給大家美妙動聽的音樂,幫助大家學習好爬蟲。

本篇文章就先帶大家爬取網易雲音樂下的歌手資訊並把資料儲存下來。

爬取結果如下:

環境:

語言:Python

工具:Pycharm

導包:

BeautifulSoup:用來解析原始碼,提取需要的元素。

selenium:因為歌手資訊不在頁面原始碼裡,用 selenium 自動化測試庫直接獲取除錯頁面的 Elements 元素資訊。

csv:資料以 csv 形式儲存下來。

程式結構:

程式由三部分組成:

get_singer():獲取歌手資訊。

get_data():資料結構轉化,方便儲存。

save2csv():儲存資料。

程式碼解析:

因頁面原始碼中沒有我們需要的資料,用 requests 無法獲取,這些元素在 Elements 可以看到,故我們用 selenium 自動化測試庫來獲取頁面。requests 庫和 selenium 庫的區別詳見上次發的文章這篇文章帶你輕鬆入門 python 爬蟲。

我用的是 Chrome 瀏覽器,需要把 chromedriver 放在 Python 安裝目錄下。具體方法上面那篇文章也講得很詳細了。

browser= webdriver.Chrome()wait= WebDriverWait(browser,5)# 設定等待時間

提取歌手資訊:

子框架的問題需注意下,我們需要的元素資訊不在主框架裡,需要切換到子框架 g_iframe 裡再操作。用 BeautifulSoup 解析元素並用選擇器提取出我們需要的資訊,最後以 zip 資料對應關係返回資料。

格式轉換:

把上面返回的資料轉換為方便儲存的資料,就是把列表裡的資料轉換為由一個個的字典組成。為了方便檢視,我把它打印出來了。

程式碼如下

資料儲存:

用 with open(…) as f 儲存資料,這種其實是一種簡化寫法,簡化前寫法如下

try:f=open('xxx.csv','r')print(f.read())finally:iff:f.close()

但由於檔案讀寫時都可能產生 IOError,為了保證無論是否出錯都能正確地關閉檔案,我們用 try … finally 來實現。

Python 簡化了改寫法,即用 with open(…) as … ,建議之後檔案讀寫都用該寫法。

還有個引數需注意,open() 裡面 r 或者 a 引數,這有什麼含義呢?

主要的引數如下:

r:以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。

w:開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。

a:開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。

上面我用的是 a,因為我儲存資料時會不斷的迴圈追加資料,如果用的是 w,那麼每次追加資料會覆蓋上一次儲存的資料。

最後執行 main 函式,我只想獲取熱門歌手的資訊,所以我把 url 中 initial 寫死為 -1,當然你也可以獲取全部的歌手資訊,網頁中是按照英文字母 A -Z排列的,對應的 initial 的值分別是 65 - 90,你可以像下面 idlist 一樣寫成列表,也用一個迴圈就可以了。

好了,本文的爬蟲專案很簡單,十幾秒的時間已經儲存了歌手姓名和歌手 id,歌手 id 資料用於下次爬蟲對應歌手歌曲的歌詞做準備的。心動不如行動,動腦還需動手,快來試試吧!

寫在最後:

 如果大家在學習Python的路上,或者打算學習Python需要學習資料,可以私信小編髮送1314,小編將免費贈送大家學習資料喔!

本文來自網路,如有侵權,請聯絡小編刪除!