国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python無損音樂搜索引擎實現代碼

2020-02-22 23:06:05
字體:
來源:轉載
供稿:網友

 

研究了一段時間酷狗音樂的接口,完美破解了其vip音樂下載方式,想著能更好的追求開源,故寫下此篇文章,本文僅供學習參考。雖然沒什么技術含量,但都是自己一點一點碼出來,一點一點抓出來的。

一、綜述:

根據酷狗的搜索接口以及無損音樂下載接口,做出爬蟲系統。采用flask框架,前端提取搜索關鍵字,后端調用爬蟲系統采集數據,并將數據前端呈現;

運行環境:windows/linux  python2.7

二、爬蟲開發:

通過抓包的方式對酷狗客戶端進行抓包,抓到兩個接口:

1、搜索接口:

http://songsearch.kugou.com/song_search_v2?keyword={關鍵字}page=1

這個接口通過傳遞關鍵字,其返回的是一段json數據,數據包含音樂名稱、歌手、專輯、總數據量等信息,當然最重要的是數據包含音樂各個品質的hash。

 

默認接口返回的數據只包含30首音樂,為了能拿到所有的數據,只需要把pagesize更改就可以,所以我提取了總數據數量,然后再次發動一次數據請求,拿到全部的數據。當然,這個總數據量也就是json中的total也是作為搜索結果的依據,如果total == 0 則判斷無法搜索到數據。

搜索到數據后,我就要提取無損音樂的hash,這個hash是音樂下載的關鍵,無損音樂hash鍵名:SQFileHash,提取到無損hash(如果是32個0就表示None),我把他的名稱、歌手、hash以字典形式傳遞給下一個模塊。

代碼實現:

a.請求模塊(復用率高):

# coding=utf-8import requestsimport jsonheaders = {  '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 retif __name__ == '__main__':  parse()

b.搜索模塊

# coding=utf-8import copyimport MusicParsedef search(keyword):  search_url = 'http://songsearch.kugou.com/song_search_v2?keyword={}page=1'.format(keyword)  # 這里需要判斷一下,ip與搜索字段可能會限制搜索,total進行判斷  total = MusicParse.parse(search_url)['data']['total']  if total != 0:    search_total_url = search_url + '&pagesize=%d' % total    music_list = MusicParse.parse(search_total_url)['data']['lists']    item, items = {}, []    for music in music_list:      if music['SQFileHash'] != '0'*32:        item['Song'] = music['SongName'] # 歌名        item['Singer'] = music['SingerName'] # 歌手        item['Hash'] = music['SQFileHash'] # 歌曲無損hash        items.append(copy.deepcopy(item))    return items  else:    return Noneif __name__ == '__main__':  search()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福贡县| 北辰区| 久治县| 潼关县| 大荔县| 彝良县| 合水县| 临沧市| 乌拉特前旗| 临清市| 南和县| 枣阳市| 临夏市| 兴仁县| 晋宁县| 黄浦区| 西吉县| 秦安县| 隆昌县| 贵州省| 青浦区| 岢岚县| 民勤县| 清水河县| 扶风县| 渑池县| 灵台县| 澄城县| 西乌珠穆沁旗| 五河县| 石阡县| 漠河县| 莒南县| 平泉县| 石景山区| 东丽区| 德清县| 永靖县| 武冈市| 临西县| 广安市|