Python爬虫之爬取酷狗音乐歌曲
1.安装第三方库
在Python的语言库中, 分为Python标准库和Python的第三方库. Python标准库是在你安装Python的时候已经包含在了安装目录下, 而Python第三方库需要使用Python的包管理pip来安装. 在本次代码中, 我们需要用到request库. requests翻译成中文就是请求, 顾名思义, requests是用来模拟用户向服务器发出请求.下面我来介绍如何安装requests库:打开cmd, 输入pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple, 如果出现黄色字体, 请先执行pip install pip -U -i https://pypi.tuna.tsinghua.edu.cn/simple. 反之, 及下载成功
2.验证下载是否成功.
打开python处理器, 输入import requests, 如果没有出现异常, 即下载成功. 反之, 请检查之前的配置.
3.代码
#!Python
# -*- encoding: utf-8 -*-
'''
1.文件名称 : MisicSpider.py
2.创建时间 : 2021/02/19 08:53:49
3.作者名称 : ZAY
4.Python版本 : 3.7.0
'''import re
import getpass
import requests
from os import systemclass Spider():def __init__(self):self.search_url = "http://songsearch.kugou.com/song_search_v2?callback=jQuery1124006980366032059648_1518578518932&keyword={}&page=1&pagesize=50&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1518578518934"self.url_headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"}self.geturl_headers = {"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","accept-encoding": "gzip, deflate, br","accept-language": "zh-CN,zh;q=0.9,en;q=0.8","cache-control": "max-age=0","cookie": "kg_mid=c597a55462cdb05b2f7dbcfe063c8e47; kg_dfid=1aF7SZ2FNXam3bTvyn0jEMtb; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1613640833; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1613641014","if-modified-since": "Thu, 18 Feb 2021 11:14:12 GMT","sec-fetch-dest": "document","sec-fetch-mode": "navigate","sec-fetch-site": "none","sec-fetch-user": "?1","upgrade-insecure-requests": "1","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"}self.api_url = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={}&album_id={}"def search(self):"""用来为用户提供搜索的函数"""# 调用接口, 用来获取搜索的json数据search_url = self.search_url.format(input("请输入你要下载的音乐的名称:"))response = requests.get(search_url, headers=self.url_headers).text# 筛选出有用json数据pydata = eval(re.match("jQuery1124006980366032059648_1518578518932((.*))", response).group(1))['data']['lists']number = len(pydata)number = range(0, number)for num in number:# 筛选并打印搜索结果song_name = pydata[num]['FileName'].replace('<em>', '').replace('</em>', '').replace('<\/em>', '')song_num = str(num + 1)print(song_num + '.\t\t' + song_name)# 获取用户想要下载的歌曲num = int(input("请输入你要下载的音乐的序号:"))-1song_name = pydata[num]['FileName'].replace('<em>', '').replace('</em>', '').replace('<\/em>', '')# 根据用户输入, 获取重要的json数据,并调用下载函数song_hash = pydata[num]['FileHash']song_id = pydata[num]['AlbumID']self.download_music(song_name, song_hash, song_id)def download_music(self, name, hash, id):"""通过api链接, 用来下载音乐的函数"""download_url = self.api_url.format(hash, id)response = requests.get(download_url, headers=self.geturl_headers)response.encoding = 'utf-8'music_data = eval(response.text.replace('true', 'True').replace('false', 'False'))['data']# 用来获取数据中的音乐的下载链接music_url = music_data['play_url'].replace('\\', '/').replace('//', '/')path = "C:\\Users\\%s\\Music\\" % (getpass.getuser())print("正在现在歌曲--> %s" % (name) + ' --> 请耐心等待...')print("下载链接为--> %s" % (music_url))music = requests.get(music_url, headers=self.url_headers).contentwith open(path + name + '.mp3', 'wb') as file:file.write(music)print("下载成功!!!")input()system('cls')if __name__ == "__main__":# 运行程序spider = Spider()while True:spider.search()
下载速度可能有点慢, 请耐心等待. 下载完成后, 歌曲回保存在C:\Users\你的用户名\Music\目录下.运行效果如下: