研究了一段时间酷狗音乐的接口,完美破解了其vip音乐下载方式,想着能更好的追求开源,故写下此篇文章,本文仅供学习参考。虽然没什么技术含量,但都是自己一点一点码出来,一点一点抓出来的。
一、综述:
根据酷狗的搜索接口以及无损音乐下载接口,做出爬虫系统。采用flask框架,前端提取搜索关键字,后端调用爬虫系统采集数据,并将数据前端呈现;
运行环境:windows/linux python2.7
二、爬虫开发:
通过抓包的方式对酷狗客户端进行抓包,抓到两个接口:
1、搜索接口:
http://songsearch.kugou.com/song_search_v2"text-align: center">
默认接口返回的数据只包含30首音乐,为了能拿到所有的数据,只需要把pagesize更改就可以,所以我提取了总数据数量,然后再次发动一次数据请求,拿到全部的数据。当然,这个总数据量也就是json中的total也是作为搜索结果的依据,如果total == 0 则判断无法搜索到数据。
搜索到数据后,我就要提取无损音乐的hash,这个hash是音乐下载的关键,无损音乐hash键名:SQFileHash,提取到无损hash(如果是32个0就表示None),我把他的名称、歌手、hash以字典形式传递给下一个模块。
代码实现:
a.请求模块(复用率高):
# coding=utf-8 import requests import json headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/63.0.3239.132 Safari/537.36', } def parse(url): ret = json.loads(requests.get(url, headers=headers, timeout=5).text) # 返回的是已经转换过后的字典数据 return ret if __name__ == '__main__': parse()
b.搜索模块
# coding=utf-8 import copy import MusicParse def search(keyword): search_url = 'http://songsearch.kugou.com/song_search_v2"htmlcode"># V2版系统,pc版 Music_api_1 = 'http://trackercdnbj.kugou.com/i/v2/"htmlcode"># coding=utf-8 import copy import hashlib import MusicParse import MusicSearch # V2版系统,pc版,加密方式为md5(hash +"kgcloudv2") Music_api_1 = 'http://trackercdnbj.kugou.com/i/v2/"kgcloudv2") (备用) Music_api_2 = 'http://trackercdn.kugou.com/i/v2/"kgcloud")(备用) Music_api_3 = 'http://trackercdn.kugou.com/i/"color: #ff0000">三、引擎搭建这个搜索引擎是基于flask框架的,设计思路比较简单,就是前端传递post数据(keyword)传递到后端,后端拿着这个keyword传递给爬虫,爬虫把数据返回给系统,系统在前端渲染出来。
代码实现:
# coding=utf-8 import sys from flask import Flask from flask import request, render_template from KgSpider import HighMusicSearch reload(sys) sys.setdefaultencoding('utf-8') app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def search(): if request.method == 'GET': return render_template('index.html') elif request.method == 'POST': keyword = request.form.get('keyword') items = HighMusicSearch.HighSearch(keyword) if items != None: return render_template('list.html', list=items) else: return '找不到!!!不支持英文' else: return render_template('404.html') if __name__ == '__main__': app.run(debug=True)四、调试
整改引擎系统,也就设计完毕,然我们试试效果:
1.启动脚本:python run.py
2.输入关键字进行搜索
五、总结
引擎搭建完毕,也能正常的运行了,但是这只是一个模型,完全没有考虑,多用户访问带来的压力,很容易崩溃,当然经过我的测试,发现只能搜索中文,英文完全无效,why?别问我,我也不知道!!!当然在这里我也想说一下,请尊重版权!!!虽然我是口是心非!!!!!
项目地址: 码云项目地址
总结
以上所述是小编给大家介绍的Python无损音乐搜索引擎实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!