Python3簡單爬蟲之下載相關型別音樂(喜馬拉雅網站)
一,簡單介紹python
1.眾所周知,python在近幾年可以說是非常火爆,在受歡迎排名上經常位於前列
2017年IEEE Spectrum 最新的研究報告
2018年TIOBE 剛剛釋出了 6 月程式語言排行榜
2.百科簡單介紹
Python是一種面向物件的解釋型計算機程式設計語言,由荷蘭人Guido van Rossum於1989年發明,第一個公開發行版發行於1991年。
Python具有豐富和強大的庫。它常被暱稱為膠水語言,能夠把用其他語言製作的各種模組(尤其是C/C++)很輕鬆地聯結在一起。等等。
3.python優勢及推薦視訊
Python相對於其他語言有以下的優勢:
1、Python易於學習
2、Python
3. Python是一門多才多藝的語言,似乎每個領域都可以使用:系統操作,Web開發,部署,科學建模等,大抵找不出第二個更多才多藝的語言了。
4.Python擁有最成熟的程式包資源庫之一
5.Python在資料科學領域被廣泛使用
Python教學視訊:
1. 騰訊課堂上的馬哥教育視訊
2. 廖雪峰的python教程網站
3. B站上的python視訊(小甲魚零基礎入門學習)
4. 有問題也可以上部落格知乎等查詢資料
二,爬蟲過程(抓取喜馬拉雅網站的音樂並下載在資料夾上)
1.實驗環境
win10,pycharm,python3.6,火狐瀏覽器
2.新增相關庫
開啟pycharm
點選設定
搜尋相關庫並新增,例如:requests
新建檔案
用火狐瀏覽器開啟喜馬拉雅網站,再點選音樂,可以得到喜馬拉雅音樂模組的url
點選流行和搖滾,我們可以觀察並發現https://www.ximalaya.com/yinyue/與搜尋內容拼音組合即使是搜尋結果的url
然後我們發現未點選播放時抓取的資訊的頁面:
點選播放後的頁面:
所以我們會發現多出get方法的一個json檔案
觀察上面兩張圖片:瀏覽這個json
並在瀏覽器開啟這個網址:
https://www.ximalaya.com/revision/play/album?albumId=391242&pageNum=1&pageSize=30
觀察可知,可以看到albumId,還有音訊檔案url:
"http://audio.xmcdn.com/group12/M03/2C/AA/wKgDW1WJ7GqxuItqAB8e1LXvuds895.m4a" |
訪問搜尋介面的原始碼,查詢albumId,通過這些albumid獲取音訊檔案的url
最後使用函式urllib.request.urlretrieve()下載音樂
效果如下:
資料夾裡下載好的歌曲:
具體程式碼:
import requests import re #正則表示式 import urllib #下載音樂的庫 from pypinyin import pinyin, lazy_pinyin import pypinyin #轉為拼音的庫 header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'} ##偽裝成瀏覽器 def Pinyin(search): #輸入要查詢的內容0 l=lazy_pinyin(search) #字串轉化為拼音 str1 = "".join(l) return str1 def SearchHtml(str,header): #獲取搜尋得到的html url= 'https://www.ximalaya.com/yinyue/'+str #print(url) html=requests.get(url,headers=header) #print(html.status_code) html.encoding=html.apparent_encoding #print(html.text) return html #"albumId":3961176,"title":"六喜珠寶-車載音樂 歐美鄉村民謠" def albumId(html): #獲取albumId的值 並將albumId與https://www.ximalaya.com/revision/play/album?albumId=組合json的url d=re.findall(r'"albumId":(.*?),',(html).text) url3=[] for x in (d[:1]): url2='https://www.ximalaya.com/revision/play/album?albumId='+x html2=requests.get(url2,headers=header) #src "http://audio.xmcdn.com/group12/M03/2C/AA/wKgDW1WJ7GqxuItqAB8e1LXvuds895.m4a" url3=(re.findall(r'"src":"(.*?)"',(html2).text)) return url3 def title(html): t=re.findall(r'"title":"(.*?)"',(html).text) #獲取titile(歌名)的值 return t def Download(url,title): #下載音樂 n=0 for y in url: try: print("正在下載——"+str(t[n])) urllib.request.urlretrieve(y,r'D:\zachary\喜馬拉雅音樂\\'+str(t[n]+'.m4a')) print("下載——"+str(t[n])+"——成功") n=n+1 except: print("下載——"+str(t[n])+"——失敗") str1=Pinyin('搖滾') html=SearchHtml(str1,header) t=title(html) url3=albumId(html) Download(url3,t)
三,結尾
謝謝各位觀看。如有錯誤的地方,非常歡迎大家通知改正。謝謝。