Python爬蟲實戰,Request+urllib模塊,批量下載爬取飆歌榜所有音樂文件

先看效果展示

前言

今天給大家介紹的是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的問題,可以在評論區留言或者私信我哦

覺得我分享的文章不錯的話,可以關注一下我,或者給文章點贊(/≧▽≦)/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章