前言
今天給大家介紹的是Python爬蟲批量下載音樂飆升榜并保存本地,在這里給需要的小伙伴們代碼,并且給出一點小心得,
首先是爬取之前應該盡可能偽裝成瀏覽器而不被識別出來是爬蟲,基本的是加請求頭,但是這樣的純文本資料爬取的人會很多,所以我們需要考慮更換代理IP和隨機更換請求頭的方式來對音樂飆升榜進行爬取,
在每次進行爬蟲代碼的撰寫之前,我們的第一步也是最重要的一步就是分析我們的網頁,
通過分析我們發現在爬取程序中速度比較慢,所以我們還可以通過禁用谷歌瀏覽器圖片、JavaScript等方式提升爬蟲爬取速度,

開發工具
Python版本: 3.6
相關模塊:
requests模塊
time模塊
parsel模塊
re模塊
time模塊
環境搭建
安裝Python并添加到環境變數,pip安裝需要的相關模塊即可,
文中完整代碼及檔案,評論留言獲取
資料來源查詢分析
瀏覽器中打開我們要爬取的頁面
按F12進入開發者工具,查看我們想要的音樂飆升榜在哪里
這里我們需要頁面資料就可以了

代碼實作
url = 'https://www.kugou.com/yy/html/rank.html'
# 請求頭: 把python代碼偽裝成瀏覽器對服務器發送請求, 服務接收到請求,確認無誤 會回傳一個回應體資料 (response)
# user-agent : 瀏覽器基本資訊
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
'Cookie': '你的Cookie'
}
response = requests.get(url=url, headers=headers)
# 獲取回應體文本資料 response.text
# print(response.text)
# 回傳是字串
# 決議資料 提取每個榜單url地址 css選擇器 主要根據標簽的屬性內容提取資料
# 需要把獲取到 response.tex 文本資料 轉換成 selector 決議物件
selector = parsel.Selector(response.text)
# attr() 屬性選擇器 選擇a標簽里面的href屬性
# getall() 獲取所有A標簽里面的內容 回傳的是串列
# get() 獲取一個a標簽里面的內容 回傳的是字串
# 直接取標簽文本資料 text
href = https://www.cnblogs.com/guzichuan/p/selector.css('.pc_rank_sidebar li a::attr(href)').getall()
href = https://www.cnblogs.com/guzichuan/p/href[15:] # 串列切片
for index in href:
response_2 = requests.get(url=index, headers=headers)
# 正則運算式里面 () 精確匹配 提取的內容
# .*? 通配符 可以匹配任意字符回傳是串列
# \d 匹配一個數字 \d+ 匹配多個數字
Hash_list = re.findall('"Hash":"(.*?)"', response_2.text)
id_list = re.findall('"album_id":(\d+),', response_2.text)
zip_data = zip(Hash_list, id_list)
for link in zip_data:
time.sleep(1)
now_time = int(time.time() *1000)
hash = link[0]
music_id = link[1]
link_url = 'https://wwwapi.kugou.com/yy/index.php'
# get請求的url 問號后面的引數 都是屬于 請求引數
# params 請求引數
# ? 非貪婪匹配 貪婪匹配 . 匹配任意一個字符(除了\n) * 匹配前字符 一個或者多個
params = {
'r': 'play/getdata',
# 'callback': 'jQuery1910035165171305796106_1624450739070',
'hash': hash,
'dfid': '4WPBq03cK0E03W1gW53TM7Vs',
'mid': '562939428ef6d5d8272814a5058a411b',
'platid': '4',
'album_id': music_id,
'_': now_time,
}
response_3 = requests.get(url=link_url, params=params, headers=headers)
獲取Cookie

效果展示

最后
今天的分享到這里就結束了 ,感興趣的朋友也可以去試試哈
對文章有問題的,或者有其他關于python的問題,可以在評論區留言或者私信我哦
覺得我分享的文章不錯的話,可以關注一下我,或者給文章點贊(/≧▽≦)/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540969.html
標籤:Python
