python音樂下載,小白也可以寫爬蟲


**
簡介:使用BeautifulSoup和request模塊進行抓取和解析,
最后保存音樂(注:音樂質量是普通品質的)
**
關於模塊的安裝,打開cmd輸入

pip install bs4 //安裝BeautifulSoup
pip install requests //安裝requests
pip install fake_useragent //這個模塊可以隨機生成一個headers

(不能安裝請升級pip或者以管理員模式打開cmd)

我們這里爬取的是網易雲音樂

https://music.163.com/artist?id=4292 //爬取的鏈接
http://music.163.com/song/media/outer/url?id= //音樂播放外鏈鏈接

首先:我們先進行網頁源碼獲取

https://music.163.com/#/artist?id=4292

https://weibo.com/6056761580/IAhNGivsJ
最開始我們是直接來用這個鏈接來請求網頁的,但是我們會發現返回的href元素是空的(#)。這個鏈接並不是真正的歌單鏈接。

https://weibo.com/6056761580/IAhNGivsJ?type=comment
但經尋找會發現source中有個不一樣的網頁鏈接

接下來我們會找到這個鏈接https://music.163.com/song?id=1407551413,看一眼是不是不太一樣。和原鏈接就一個‘/#’之差,內容就不一樣,這是網易雲隱藏了源網頁。
然后仔細查看就可以找到音樂id和名稱

接下來就是代碼實現了

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
import time
import os

def createFile(file_path):
if os.path.exists(file_path) is False:
os.makedirs(file_path)
# 切換路徑至上面創建的文件夾
os.chdir(file_path)

def get_html():
url = 'https://music.163.com/artist?id=4292'
headers = {
'User-Agent': UserAgent().random #隨機一個模仿瀏覽器請求頭
}
response = requests.get(url, headers=headers)
res = BeautifulSoup(response.text, 'lxml')
id_lists = res.find(class_='f-hide').find_all('a')
return id_lists

def download(names,hrefs):
#獲取音樂id后還要進行解析並保存
headers = {
'User-Agent': UserAgent().random
}
#這里還要再加個headers,不然會假數據
url = 'http://music.163.com/song/media/outer/url?id='
#網易雲外鏈地址,通過這個可以免費下載
response = requests.get(url+hrefs,headers=headers).content
#返回二進制
f = open('D:\\music\\{}.mp3'.format(names),'wb') #這里下載的歌曲儲存到E盤music文件夾
f.write(response)
print('正在下載{}'.format(names))

if __name__ == '__main__':
createFile('D:\music')
get_html()
for id_url in get_html():
names = id_url.text
hrefs = id_url['href'][9:]
#用變量來接收歌曲名和id
download(names,hrefs)
time.sleep(1) #睡眠一秒,防止過於頻繁訪問


如果你想下載其他歌曲可以把url中的鏈接換掉,注意把‘/#’刪除以獲取真正的鏈接。這個代碼適用於歌單和專輯下載

最后謝謝大家看完,本人小白一個。今年大一自學了3個月python。第 一次發博客,如有不好之處,望指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM