Python爬取酷我音乐网站并利用Django框架进行前端展示
说明:本文是基于python的开发环境下编写爬虫程序,并利用Django框架进行前端页面展示和后端数据管理。
第一步:分析网站数据
百度输入酷我音乐,搜寻酷我音乐官网并打开。
按下F12或者鼠标右击空白处,点击“检查”,打开开发者模式后点击network。在搜索栏输入歌手,例如周杰伦,找到刚刚点击的查找接口searchMusicByKeyWord。
点击接口后可以看到请求的url信息
往下查看有请求头的参数,这里有我们需要的Cookie、Csrf、Referer和User-agent这几个参数值,待会儿我们写爬虫就需要这四个参数。
继续在搜索栏输入一首不收费的歌曲,这里我搜了予君书这首歌,点击播放按钮后找到url?format=mp3接口,点击找到请求的url链接。
复制找到的请求url地址,在空网页搜索栏上粘贴,这里就是我们请求成功的接口信息。同样也是要保存这个url地址,待会儿我们写爬虫要用到这个url地址。(可以复制mp3后缀的链接粘贴到空白的网页上,可以直接听歌曲)
第二步:编写爬虫代码
import requests
def get_music_info(search_music):#定义获取音乐列表的方法,写入搜索歌手或者音乐的参数
#请求头参数,需要我们第一次搜索周杰伦里面的参数值
headers={
'User-Agent': 'Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
'Referer': 'http://www.kuwo.cn/',
'Cookie':'Hm_lvt_cdb524f42f0ce19b169a8071123a4797 = 1620477652, 1620525309, 1620547610, 1620657302;_ga=GA1.2.902163124.1620657302; _gid=GA1.2.1326624726.1620657302;Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1620657402;kw_token=T5VKZUZ7R6H;_gat=1',
'csrf':'T5VKZUZ7R6H'
}
#搜索歌手或者音乐的url地址,关键字传入参数
url=f'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={search_music}&pn=1&rn=30&httpsStatus=1&reqId=919ec530-b19f-11eb-9f3d-175828479c94'
#requests请求酷我网站并以json格式返回
response=requests.get(url.format(search_music),headers=headers).json()
#定位返回的json字典里面的data里面的list列表
music_data=response['data']['list']
music_info=[]
# print(music_data)
#循环搜索列表里面的每一个rid值并且传入到第二次搜索的免费歌曲的url里面的rid中,同时获取图片pic和名字name值
for info in music_data:
music_rid=info['rid']
music_pic=info['pic']
music_api=f'http://www.kuwo.cn/url?format=mp3&rid={music_rid}&response=url&type=convert_url3&br=128kmp3&from=web&t=1620657419282&httpsStatus=1&reqId=2d4b3f21-b19d-11eb-9f3d-175828479c94'
music_play_url=requests.get(music_api,headers=headers).json()['url']
item={
'music_pic': music_pic,
'music_name':info['name'],
'music_play_url':music_play_url
}
#将搜索到的值传入到定义的空列表中展示
music_info.append(item)
# print(music_info)
#返回最终结果
return music_info
第三步:搭建Django框架
打开cmd命令行,进入一个新建的空白文件夹里面,输入以下命令:
这里忘记进入D盘了,建议输入D:命令进入D盘或者别的盘,不要在系统盘创建!!创建好后打开pycharm导入我们刚刚创建好的Music_Online项目。
进入Music_Online子模块(在大的下面那个),点击setting注册新创的app
在主模块Music_Online下新建templates目录,放入我们的index前端页面。(后面展示全模块再上图)
在search目录下新建一个kuwomusic_api模块,导入我们上面写的get_music_info方法。
编写search目录下的views模块
from django.shortcuts import render
from django.views.generic import View
from search.kuwomusic_api import get_music_info
class Index(View):
#重写http请求方法
def get(self,request):
#前端有一个搜索框,定位搜索框‘q’,判断搜索框的值
if request.GET.get('q') is None:
return render(request,'index.html')
#如果有值调用接口并返回搜索的值
search_music= request.GET.get('q')
infos = get_music_info(search_music)
return render(request,'index.html',{'infos':infos})
#重写post方法,暂时未用上
def post(self):
pass
编写Music_Online(子目录)下的urls路径
from django.contrib import admin
from django.urls import path
from search.views import Index
urlpatterns = [
path('admin/', admin.site.urls),
path('',Index.as_view())
]
右上角选择Music_Online项目,点击播放按钮运行。
运行后打开网站如下:
搜索栏中输入‘苏打绿’,出现代表歌曲、专辑图片和播放链接,点开链接可以直接播放歌曲。
在python终端中输入命令进行数据迁移同时在网页链接后加入admin可以进入管理员模式:
在setting模块更改管理员界面为中文
本次的音乐爬虫网站搭建完成,因为本人还未学习完Django连接db的课程,日后有需要的会加以补充。第一次写文章还有许多不足之处,欢迎大家讨论一起学习!