1. 程式人生 > >Python3簡單爬蟲之下載相關型別音樂(喜馬拉雅網站)

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)

三,結尾

謝謝各位觀看。如有錯誤的地方,非常歡迎大家通知改正。謝謝。