前言 大家都很喜歡聽歌吧,沒有人不喜歡聽歌。心情好的時候要聽歌,心情不好的時候也要聽歌,反正歌是大家都喜歡聽的。 最近我想在網站上下載幾首音樂放到我的u盤裡聽,但是上網上一找,各大音樂網站下載歌曲(尤其是好聽的歌曲)都需要vip。 對於像我這樣的窮人來說,肯定是不會花幾十塊錢去下載幾首音樂啦,而且作 ...
前言
大家都很喜歡聽歌吧,沒有人不喜歡聽歌。心情好的時候要聽歌,心情不好的時候也要聽歌,反正歌是大家都喜歡聽的。
最近我想在網站上下載幾首音樂放到我的u盤裡聽,但是上網上一找,各大音樂網站下載歌曲(尤其是好聽的歌曲)都需要vip。
對於像我這樣的窮人來說,肯定是不會花幾十塊錢去下載幾首音樂啦,而且作為程式員,充錢去下載音樂那也是不可能的,於是
我花了一天時間,上網找了各種資料來學習一下怎樣才能不花錢白嫖到網站上的音樂。
當然,方法還是有很多種的,最後我還是選擇了一種最簡單,最方便的一種方法: python爬蟲。下麵,我就跟大家分享一下我在
用python爬蟲時遇到的坑。
下麵,我以爬取某易雲音樂為例,介紹一下我時如何學習python爬蟲的:
思路:
•音樂從哪裡來?—網站的伺服器里
•怎麼從網址里得到音樂?—向網站發起網路請求
•刪選音樂文件
•下載音樂文件
具體實現
- 引入發送網路請求的第三方庫
import requests # 發送網路請求的第三方庫 複製代碼
安裝方法
pip install requests
2 引入數據解析第三方庫
from lxml import etree # 數據解析第三方庫 複製代碼
安裝方法
pip install lxml
3 某易雲音樂網站列表url為’https://music.163.com/#/discover/toplist?id=3778678’
url = 'https://music.163.com/#/discover/toplist?id=3778678' 複製代碼
4 發送請求獲取頁面數據
response = requests.get(url=url) # 請求頁面數據 複製代碼
5 解析數據
html=etree.HTML(response.text) # 解析頁面數據 複製代碼
6 獲取所有歌曲標簽集合( a標簽 )
id_list = html.xpath('//a[contains(@href,"song?")]') # 所有歌曲id集合 複製代碼
7 下載歌曲
Python學習交流Q群:906715085### base_url = 'http://music.163.com/song/media/outer/url?id=' # 下載音樂網址首碼 # 下載音樂url = 網址首碼 + 音樂id for data in id_list: href = data.xpath('./@href')[0] music_id = href.split('=')[1] # 音樂id music_url = base_url + music_id # 下載音樂url music_name = data.xpath('./text()')[0] # 下載音樂名稱 music = requests.get(url = music_url) # 將下載的音樂以文件形式保存下來 with open('./music/%s.mp3' % music_name, 'wb') as file: file.write(music.content) print('<%s>下載成功' % music_name) 複製代碼
遇到的坑
以上的方法我是從一個視頻里學到的,那個視頻是半年前出的,可能當時這種方法還好使,但是今天我在用這種方法下載音樂文
件的時候突然就報錯了。
首先,編輯器報錯找不到 music_name 和 music_id ,我仔細一看,獲取的id_list集合里(也就是標簽集合里)的id根本不是id,是
代碼,估計在這裡音樂網站也做了相應的反扒機制。
其次,我自己在網站里找到了一首音樂獲取了它的id並把id賦值給music_id,結果當用外鏈下載音樂時報錯460,顯示網路擁擠,
估計下載音樂的網址也不好使了。
base_url = 'http://music.163.com/song/media/outer/url?id=' music_id = '1804320463.mp3' music_url = base_url + music_id music = requests.get(url=music_url) print(music.text) 複製代碼 {"msg":"網路太擁擠,請稍候再試!","code":-460,"message":"網路太擁擠,請稍候再試!"}e
最後,我列印出music_url,點擊進去,還是可以聽歌和下載的,不知道這是為什麼了
base_url = 'http://music.163.com/song/media/outer/url?id=' music_id = '1804320463.mp3' music_url = base_url + music_id # music = requests.get(url=music_url) print(music_url) 複製代碼 music.163.com/song/media/…
最後
希望以後在爬取音樂的時候都不會在遇到。今天的分享到這裡就結束了,下一章再見。