上一篇教程:Python爬蟲從0到1 | 入門實戰:360翻譯 ——requests庫之POST方法
讀完本文,你將識訓:
- Python的requests庫爬蟲之get方法
- 省錢
前言
首先我們來說說 http請求中 post 和 get 方式的異同,
post 方法,就是在你進入一個網頁后,你發送的新的請求以進行一些操作,post 方法需要兩個重要的引數 url 和 data,url 表示要發送請求的網址,data 則是提交的資料和資訊,網頁根據新得到的資訊,再渲染加載出新的頁面,比如360翻譯,在進入翻譯界面后,通過填寫翻譯內容、點擊翻譯按鈕,網頁回傳翻譯的結果,這就是 post 請求,
get 方法,一般是直接通過發送請求,來獲取網頁資訊,比如,直接通過 get 方法獲取網頁上的豆瓣電影排行榜等,當然,也有時候 get 方法使用的情況和 post 方法相似,這時候就要看網頁所規定的請求方式了,就如下面這個例子:搜索酷我音樂并獲取音樂基本資訊,
準備
安裝 requests 庫:
快捷鍵 Windows+r 打開運行控制框,輸入 cmd,進入命令列,輸入:
pip install requests
匯入:
import requests
網頁分析
首先進入酷我音樂主頁,右鍵,點擊檢查元素,調出開發者模式,點擊Network(網路),開始錄制,我們在搜索欄里輸入“夜曲”:

之后,我們可以看到一個以searchMusicBykeyWord開頭的鏈接,點進去,Preview里有我們需要的資訊,位置為data > list:

接下來切到 Headers一欄,看到請求的資訊,

可以看到,這次請求需要用到的是 get 方法,一般格式為:
requests.get(url=<url地址>, headers=<請求頭>, params=<資訊>)
url 地址和請求頭這里就不贅述了,詳細介紹見上一篇教程,其中 url 只取問號前面的,Headers 必要的引數是 Cookie、csrf、Referer,如果缺少會報錯,詳情見文章:Python的requests爬取酷我音樂的一些坑,
url = 'https://www.kuwo.cn/api/www/search/searchMusicBykeyWord'
headers = {
'Cookie': '...kw_token=IR4PF56LDX',
'csrf': 'IR4PF56LDX',
'Referer': 'https://www.kuwo.cn/search/list'
}
接下來看到 params,與 post 方法的 data 相似,它表示的是發送的資訊,我們將 Headers 欄滑到底部,看到 params:

類似地,我們把 params 復制下來:
params = {'key': '夜曲',
'pn': '1',
'rn': '30',
'httpsStatus': '1'
}
這樣,我們就有了完成一次 get 請求所需要的資訊,
發送請求
接下來我們可以發送請求獲取請求結果:
respond = requests.post(url=url, params=params, headers=headers)
接下來看看請求結果:
print(respond.status_code) # 列印狀態碼
print(respond.text) # 列印回傳文本
print(respond.json()['data']) # 列印回傳文本經json解碼后的data部分
輸出:

……額 回傳內容過長,不建議細讀,
最后我們根據歌曲資訊所在的位置獲取串列:
list_music = respond.json()['data']['list']
串列的內容過長,這是因為其中有大量我們不需要的資訊,這時候我們對資訊來一次篩選:
list_music = [{'name':i['name'], 'artist':i['artist'], 'time':i['songTimeMinutes'], 'id':i['rid'], 'album': i['album'], 'picture':i['pic']} for i in list_music]
然后列印結果:
for i, n in enumerate(list_music):
print(str(i) + ':' + n['name'] + '——' + n['artist'] + ' 【' + n['album'] + '】')

就這樣,我們成功地搜索到了相關音樂并列印出了音樂資訊,
當然,僅僅這樣還不能夠下載音樂,若要下載音樂,我們需要到另一個鏈接發送 get 請求,
下載音樂
首先選定一首音樂,在串列里找到它的 id(就在上面串列中),然后點擊播放,這時候我們可以發現這邊多了一個以 url 開頭的檔案,檔案內容就是我們需要的鏈接:

看它的 params:

照樣用 get 方法,在 params 中的 rid 后放入音樂的 id,然后就能夠獲得該音樂的鏈接,再以這個鏈接為地址,發送一次 get 請求,獲得它的二進制檔案后寫入本地的 mp3 檔案,看下面:
用法2
這時候我們直接通過發送請求,來獲取網頁資訊,
在上面我們已經獲得了音樂的鏈接,進入鏈接地址進入網頁:

這時候網頁的內容就是音頻檔案,我們直接發送一個 get 請求來獲取:
respond2 = requests.get(url='https://win-web-nf01-sycdn.kuwo.cn/2383a5d506a2aa64382dfa54b0b52932/61091200/resource/n1/53/70/1432652703.mp3')
mp3 = respond2.content # 獲取二進制檔案
然后寫入本地 mp3 檔案:
with open ('夜曲.mp3','wb') as i:
i.write(mp3)

打開就能夠順利播放,大功告成!
成功爬取酷我音樂!
the End
這篇文章就到這里了,點個贊支持一下吧!
本文收錄于專欄:Python爬蟲
關注作者,持續閱讀作者的文章,學習更多Python知識!
https://blog.csdn.net/weixin_52132159
2021/8/3
推薦閱讀
- Python爬蟲 | 爬取b站北京奧運會開幕式彈幕,有多少人從東京奧運會跑過來的?
- 絕密!Python爬蟲告訴你刷分機器人背后的原理!這篇文章差點沒過審
- Python每天一道題:昆蟲繁殖問題?我把密密麻麻的幼蟲和成蟲搞定了
- Python爬蟲從0到1 | 入門實戰:360翻譯 ——requests庫之POST方法(新手必看,保姆級別教學)
- 沒想到我連五年級的題目都解不出來?可不能被人小看,讓萬能的Python登場
- Python:程式猿怎么追女生?教你短短幾行代碼表白,告別表白尷尬!
- 想學Python不知從何入手?學習Python必備秘籍,附地址,速拿!
- Python標準庫:datetime 時間和日期模塊 —— 時間的獲取和操作詳解
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292047.html
標籤:python
