首頁>技術>

基本開發環境Python 3.6Pycharm相關模組的使用

import requestsimport os

安裝Python並新增到環境變數,pip安裝需要的相關模組即可。

一、明確需求

爬取某音樂網站的排行榜歌曲。

#  乾飯人之歌 音訊資料地址:https://gm-sycdn.kuwo.cn/82c2c756b7ebeacb907831ff0906199e/601a3aa9/resource/n2/88/78/3642423505.mp3

複製連結貼上到瀏覽器中

# 音訊連結來源https://www.kuwo.cn/url?format=mp3&rid=160864905&response=url&type=convert_url3&br=128kmp3&from=web&t=1612331691895&httpsStatus=1&reqId=550f7f80-65e4-11eb-9b00-6d65a3b5fef1

一首歌曲的來源地址是找不出規律的,所以要再對比一些另外一首歌曲的連結引數

如圖所示: rid 和 t 引數不一樣,很明顯 t 就是代表的時間戳,這個使用 time.time() 就有了,所以可以繼續在開發者工具中搜索 rid 的值

https://www.kuwo.cn/api/www/bang/bang/musicList?bangId=93&pn=1&rn=30&httpsStatus=1&reqId=428dcbf0-65e4-11eb-9b00-6d65a3b5fef1

rid 以及 歌名 歌手名都有了。

三、程式碼實現

爬蟲分析思路是從上到下開始分析,寫程式碼則是從下往上寫。

1、獲取音樂的 rid 、歌名、歌手名

import pprintimport requestsdef get_response(html_url):    headers = {        'Cookie': '你自己的cookie',        'csrf': 'D2YF7NMH81N',        'Host': 'www.kuwo.cn',        'Referer': 'https://www.kuwo.cn/rankList',        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',    }    response = requests.get(url=html_url, headers=headers)    return responsedef get_music_info(html_url):    json_data = get_response(html_url).json()    pprint.pprint(json_data)    music_list = json_data['data']['musicList']    for index in music_list:        music_name = index['album']        singer = index['artist']        music_rid = index['rid']        if __name__ == '__main__':    url = 'https://www.kuwo.cn/api/www/bang/bang/musicList?bangId=93&pn=1&rn=30&httpsStatus=1&reqId=428dcbf0-65e4-11eb-9b00-6d65a3b5fef1'    get_music_info(url)

返回的是一個json資料,一個一個去取值就可以了,主要的注意點就是headers引數的問題,如果引數不給全,爬取不到資料。

2、獲取音訊URL地址

def get_music_url(music_rid):    page_url = f'https://www.kuwo.cn/url?format=mp3&rid={music_rid}&response=url&type=convert_url3&br=128kmp3&from=web&t=1612331691895&httpsStatus=1&reqId=550f7f80-65e4-11eb-9b00-6d65a3b5fef1'    json_data = get_response(page_url).json()    music_url = json_data['url']    return music_url

3、儲存音訊資料

def save(music_name, music_url):    path = 'music\\'    if not os.path.exists(path):        os.makedirs(path)    filename = path + music_name + '.mp3'    headers = {        'if-range': '8eba7fc5d5b2f4d223d54612aa3f4773',        'range': 'bytes=524288-524288',        'upgrade-insecure-requests': '1',        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400',    }    music_content = requests.get(url=music_url, headers=headers).content    with open(filename, mode='wb') as f:        f.write(music_content)        print('正在儲存:', music_name)

請求音樂下載的地址的 headers 需要更換一下。不然爬取不了音樂。

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Docker - 私有倉庫Registry