酷狗音樂的爬取,基于python,從無到有完整教程,使用微軟新edge作為虛擬瀏覽器
搭建環境及爬取原理講解 ???
編碼環境及工具準備:
編碼工具:PyCharm

所需的庫:
import requests,random,string,re,time,json
from bs4 import BeautifulSoup
from selenium import webdriver
#Requests庫是用Python撰寫的,基于urllib,采用Apache2 Licensed開源協議的HTTP庫;
#相比urllib庫,Requests庫更加方便,可以節約我們大量的作業,完全滿足HTTP測驗需求;
#WebDriver是一個用來進行復雜重復的web自動化測驗的工具
#Beautiful Soup 提供一些簡單的、python 式的函式用來處理導航、搜索、修改分析樹等功能,它是一個工具箱,通過決議檔案為用戶提供需要抓取的資料
配置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")
find和findall方法都是基于給定特征來運作,如id,class等等
像特殊的屬性,如data-active引數項,要使用attrs=" “關鍵字來包含
其他的可直接寫入括號中,如class,而標簽直接寫在開頭,如"a”,“div”,“li”
獲取歌曲的下載url:
上一步驟中,我們已經獲取了每個歌曲的播放頁面鏈接
我們手動跳轉到其中一首歌曲的播放頁面鏈接,如下圖
我們F12打開開發者工具,轉到network來查看在在加載當前頁面時,瀏覽器后臺所發生的網路請求

其中有一條請求就包含了歌曲下載url,我已經幫大家找出來了
該請求前綴名為index.php?r=play/getdata&callback,該請求包含了作者名,歌曲名,歌曲播放鏈接,封面等等,是一個json格式檔案,如下圖

那么我們看看如何讓我們的虛擬瀏覽器自動去得到這個包含了如此多資訊的鏈接?
我們回到這個地方

可以看到,這是由大大小小的引數項拼接而成的一條請求
https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19103229977125128476_1609770061395&hash=55F4335A672A3FA0E84276116FC1AA89&dfid=2SoVLy2WYH7H12v3g50D57Z6&mid=86f5acfdf2ca3dd39396e98ac4074a42&platid=4&album_id=960994&_=1609770061396
里面分別有hash,dfid,mid,platid,albumid這些引數項,經過分析,除了hash和platid指定之外,其他都是亂數就行(是不是很好操作了<_>)
hash呢,細心的小伙伴應該有發現,他就包含在歌曲播放頁面的鏈接里面,然后platid固定為4就ok了,其他的我們就需要用萬能的random來實作了,
接下來就是寫代碼了,代碼部分分在下一章,不然加起來太長了,怕你們不看||_||
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/245218.html
標籤:python
上一篇:Python實作小游戲2048
