幾行程式碼爬取喜馬拉雅音樂
阿新 • • 發佈:2018-12-12
爬取喜馬拉雅音樂
首先進入網址,我們能看到所有的音樂列表。開啟開發者工具F12,點選網路,重新整理網頁,我們能看到幾條資料。
我們點選播放一首音樂,觀察下面的資料變化情況。發現紅色部分標記的內容,點選一下。
注意請求頭部分的網址,並觀察網址結構。點選響應按鈕,檢視一下內容。
我們發現裡面是一個json串,裡面有音樂的一些資訊,我們想要下載音樂,因此只需要音樂 名,及音樂地址。紅色標記部分src為音樂地址。
我們訪問一下這個音樂地址,看看內容:恰好是音樂,說明我們尋找的資料正確
這樣下載這首音樂就非常簡單了,請求網址https://www.ximalaya.com/revision/play/album?albumId=3595841&pageNum=1&sort=-1&pageSize=30
這是獲取一首音樂的方法,獲取整個介面的音樂只需遍歷json串中的src資料。
html=requests.get(url,headers=headers) ret=html.content.decode()#返回字串型別資料 #print(ret) result = json.loads(ret) #print(result['data']['tracksAudioPlay'][0]['src']) for i in result['data']['tracksAudioPlay']: #print(i['src']) src=i['src'] name=i['trackName'] #print(name) #儲存資料 with open("./{}.mp3".format(name),'ab')as f: music=requests.get(src,headers=headers) f.write(music.content)
想要把六個頁面的所有音樂都爬取下來,就要觀察一下其他頁面的網址。採用上述同樣的抓取方法。這是第二頁的
第三頁的:
這樣就發現了規律,因此可以寫一個通用表示式,https://www.ximalaya.com/revision/play/album?albumId=3595841&pageNum="+(str)(a)+"&sort=-1&pageSize=30
其中a是傳入的引數,也就是第幾頁。
這樣我們就完成了對我們需求的分析。
所有程式碼:
#爬取喜馬拉雅音樂排行榜中所有的音樂 import requests import json,time #https://www.ximalaya.com/revision/play/album?albumId=3595841&pageNum=3&sort=-1&pageSize=30 def xima(a): url = "https://www.ximalaya.com/revision/play/album?albumId=3595841&pageNum="+(str)(a)+"&sort=-1&pageSize=30" headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:62.0) Gecko/20100101 Firefox/62.0', } html=requests.get(url,headers=headers) ret=html.content.decode()#返回字串型別資料 #print(ret) result = json.loads(ret) #print(result['data']['tracksAudioPlay'][0]['src']) for i in result['data']['tracksAudioPlay']: #print(i['src']) src=i['src'] name=i['trackName'] #print(name) #儲存資料 with open("./{}.mp3".format(name),'ab')as f: music=requests.get(src,headers=headers) f.write(music.content) if __name__ == '__main__': for i in range(1,7): xima(i) time.sleep(5)
去掉所有註釋,程式碼非常簡單。只是簡單的json資料獲取,檔案寫入,time.sleep()控制速度。