先看效果展示
前言
今天給大家介紹的是Python爬取飆歌榜所有音頻數據並保存本地,在這裏給需要的小夥伴們代碼,並且給出一點小心得。
首先是爬取之前應該儘可能僞裝成瀏覽器而不被識別出來是爬蟲,基本的是加請求頭,但是這樣的純文
本數據爬取的人會很多,所以我們需要考慮更換代理IP和隨機更換請求頭的方式來對音樂數據進行爬取。
在每次進行爬蟲代碼的編寫之前,我們的第一步也是最重要的一步就是分析我們的網頁。
通過分析我們發現在爬取過程中速度比較慢,所以我們還可以通過禁用谷歌瀏覽器圖片、JavaScript等方式提升爬蟲爬取速度。
開發工具
Python版本: 3.8
相關模塊:
requests模塊
re模塊
urllib模塊
環境搭建
安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。
思路分析
瀏覽器中打開我們要爬取的頁面
按F12進入開發者工具,查看我們想要的音樂數據在哪裏
這裏我們需要頁面數據就可以了
代碼實現
# 存放音樂文件的文件夾
folder = r'F:\music'
if not isdir(folder):
mkdir(folder)
# 音樂飆升榜地址
url = 'https://music.163.com/discover/toplist?id=3779629'
# 模擬Chrome瀏覽器
headers = {'User-Agent': 'Chrome/88.0.4324.190'}
req = Request(url, headers=headers)
# 讀取網頁源代碼
with urlopen(req) as fp:
content = fp.read().decode()
# 正則表達式,提取音樂id和名字
pattern = r'<li><a href="/song\?id=(.+?)">(.+?)</a></li>'
for music_id, music_name in findall(pattern, content):
music_file = rf'{folder}\{music_name}.mp3'
if isfile(music_file):
print(f'文件已存在,跳過...{music_name}')
continue
# 下載地址
download_url = rf'https://music.163.com/song/media/outer/url?id={music_id}'
req = Request(download_url, headers=headers)
# 讀取網絡音樂文件數據,寫入本地文件
with urlopen(req) as fp:
content = fp.read()
with open(music_file, 'wb') as fp:
fp.write(content)
print(f'下載完成...{music_name}')
最後
今天的分享到這裏就結束了 ,感興趣的朋友也可以去試試哈
對文章有問題的,或者有其他關於python的問題,可以在評論區留言或者私信我哦
覺得我分享的文章不錯的話,可以關注一下我,或者給文章點贊(/≧▽≦)/