酷狗音樂的爬取,基於python,從無到有完整教程-上:搭建環境及爬取原理講解

qwer1030274531發表於2021-01-13

所需的庫:

import requests,random,string,re,time,jsonfrom bs4 import BeautifulSoupfrom selenium import webdriver#Requests庫是用Python編寫的,基於urllib,採用Apache2 Licensed開源協議的HTTP庫;#相比urllib庫,Requests庫更加方便,可以節約我們大量的工作,完全滿足HTTP測試需求;#WebDriver是一個用來進行復雜重複的web自動化測試的工具#Beautiful Soup 提供一些簡單的、python 式的函式用來處理導航、搜尋、修改分析樹等功能。它是一個工具箱,透過解析文件為使用者提供需要抓取的資料1234567

配置interpreter(編譯器):

1、 構建編譯器

進入軟體,左上角File > settings,進入到下圖介面

在這裡插入圖片描述
在這裡插入圖片描述

詳細可戳

2、 下載庫

還是剛剛那個settings視窗
在這裡插入圖片描述


獲取網頁資料:

建立webdriver,此處使用微軟的edge瀏覽器
需要下載edge的 webdriver
然後還要將此webdriver的目錄加到selenium的webdriver目錄中,為什麼呢,因為selenium庫要使用他,為什麼要用selenium,因為我們要用它來解碼html(當然它還可以幹很多活,比如根據特徵定位某個元素並執行動作,比如滑鼠點選或鍵盤輸入)

在這裡插入圖片描述

此處選擇- 酷狗音樂排行榜-作為爬取的網頁,如下圖
按F12可開啟開發者工具檢視當前網頁的構成,也就是一個html程式碼
在這裡插入圖片描述
經過分析,每個榜單的定位元素為li,其中的href屬性值即為每個 榜單的歌曲頁面url,即上圖中的右側
在這裡插入圖片描述
而每首歌曲的播放頁面在一個id為rankwrap的div裡面,裡面也有一長串li列表元素,其中也就是包含每個 歌曲播放頁面連結的元素,如下圖
在這裡插入圖片描述
在這裡插入圖片描述
到此,我們分析這些分別包含了 榜單連結,歌曲播放頁面連結的元素,然後使用beautifulsoup庫所提供給我們的find方法來寫一個自動化爬取流程,如下,爬取的目標為歌曲播放頁連結

soup = BeautifulSoup(data, 'html.parser')
    # 網頁帶有16進位制,需解碼href_list = soup.findAll('a', attrs="data-active=\"playDwn\"", class_="pc_temp_songname")123

find和findall方法都是基於給定特徵來運作,如id,class等等
像特殊的屬性,如data-active引數項,要使用attrs=" “關鍵字來包含
其他的可直接寫入括號中,如class,而標籤直接寫在開頭,如"a”,“div”,“li”


獲取歌曲的下載url:

上一步驟中,我們已經獲取了每個歌曲的 播放頁面連結
我們手動跳轉到其中一首歌曲的播放頁面連結,如下圖
我們F12開啟開發者工具,轉到network來檢視在在載入當前頁面時,瀏覽器後臺所發生的網路請求

在這裡插入圖片描述
其中有一條請求就包含了歌曲下載url,我已經幫大家找出來了
該請求字首名為 index.php?r=play/getdata&callback,該請求包含了作者名,歌曲名,歌曲播放連結,封面等等,是一個json格式檔案,如下圖 /oldage/ 在這裡插入圖片描述
那麼我們看看如何讓我們的虛擬瀏覽器自動去得到這個包含了如此多資訊的連結?
我們回到這個地方

在這裡插入圖片描述
可以看到,這是由大大小小的引數項拼接而成的一條請求


裡面分別有hash,dfid,mid,platid,albumid這些引數項,經過分析,除了hash和platid指定之外,其他都是隨機數就行(是不是很好操作了<_>)
hash呢,細心的小夥伴應該有發現,他就包含在 歌曲播放頁面的連結裡面,然後platid固定為4就ok了,其他的我們就需要用萬能的random來實現了。

接下來就是寫程式碼了,程式碼部分分在下一章,不然加起來太長了,怕你們不看||_||


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2749630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章