前言 今天給大家介紹的是Python爬蟲批量下載音樂飆升榜並保存本地,在這裡給需要的小伙伴們代碼,並且給出一點小心得。 首先是爬取之前應該儘可能偽裝成瀏覽器而不被識別出來是爬蟲,基本的是加請求頭,但是這樣的純文本數據爬取的人會很多,所以我們需要考慮更換代理IP和隨機更換請求頭的方式來對音樂飆升榜進行 ...
前言
今天給大家介紹的是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 = selector.css('.pc_rank_sidebar li a::attr(href)').getall()
href = 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的問題,可以在評論區留言或者私信我哦
覺得我分享的文章不錯的話,可以關註一下我,或者給文章點贊(/≧▽≦)/