bbbbbd 发表于 2017-9-19 20:01

python爬取酷狗音乐播放地址

本帖最后由 bbbbbd 于 2017-9-19 21:28 编辑

最近在学python,无聊拿酷狗练了练手{:301_1009:}
运行环境:python 2.7

# -*- coding:utf8 -*-
import sys
import requests
import re
import json
reload(sys)
sys.setdefaultencoding( "utf-8" )

#搜索获取音乐列表
def get_music_info(url):
    response = requests.get(url)
    return parse_music_info(response.text)
#解析音乐列表
def parse_music_info(html):
    pattern = re.compile('{"SongName":.*?"Grp":.*?[]|}],"AlbumPrivilege":.*?}')
    result = re.findall(pattern, html)
    for item in result:
      item = json.loads(item )
      yield ,item['AlbumID'],item['AlbumName'],item['Duration'],item['FileHash']]
#跳转到每个歌曲的详细页面
def get_play_url(hash_id,album_id):
    url = 'http://www.kugou.com/yy/index.php?r=play/getdata&hash='+hash_id+'&album_id='+album_id+'&_=1505738969338'
    response = requests.get(url)
    return parse_play_url(response.text)
#解析歌曲的播放地址
def parse_play_url(html):
    pattern = re.compile('"play_url":"(.*?)"')
    result = re.findall(pattern, html)
    if result:
      return result.replace('\\','')
#程序入口
def main(keyword):
    url = 'http://songsearch.kugou.com/song_search_v2?callback=jQuery112405213552049562944_1505739248953&keyword='+keyword+'&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter'
    # html = get_music_info(url)
    for item in get_music_info(url):
      play_url = get_play_url(item,item)
      second = int(item)%60
      second = str(second) if second > 10 else '0'+str(second)
      print '歌名:'+str(item),'专辑:'+ str(item),'时长:'+str(int(item)/60)+':'+second,play_url

if __name__ == '__main__':
    main('梦然')



bbbbbd 发表于 2017-9-24 16:33

本帖最后由 bbbbbd 于 2017-9-24 16:51 编辑

cs001 发表于 2017-9-24 16:04
谢谢楼主分离的python代码,但我发现抓取下来的都是128k的mp3,不知道能否抓取到320k的。。?
回头我看看吧,不过我的另外一个帖子抓取网易云的可以直接获取320kbps的音乐,只需要把源码中的一个参数改一下就行:{ids: "[' + str(id) + ']", br: 128000, csrf_token: ""}中的128000改为320000就可以获取到320kbps的音乐了,如果需要你去看一下{:301_998:}


刚看了一下获取酷狗的320kbps也很简单, 只需要把这个参数总的item['FileHash']中的FileHash换成HQFileHash即可,不过有些音乐可能没有320的

chadd 发表于 2019-8-10 10:05

楼主提出如下:
print '歌名:'+str(item),'专辑:'+ str(item),'时长:'+str(int(item)/60)+':'+second,play_url
            ^
SyntaxError: invalid syntax

zz0147 发表于 2017-9-19 20:40

厉害。
学习一下。

ggxxuser 发表于 2017-9-19 21:11

获取的是真实地址吗?

bbbbbd 发表于 2017-9-19 21:30

ggxxuser 发表于 2017-9-19 21:11
获取的是真实地址吗?

嗯,是真实地址{:1_1:}

打酱油的店小五 发表于 2017-9-19 21:43

正在在自学python,来看看

mywebzone 发表于 2017-9-19 22:14

函数顺序有点乱代码阅读起来比较费劲

chqsb123 发表于 2017-9-19 23:05

学到哪里才能做爬虫??请问?

bbbbbd 发表于 2017-9-19 23:13

mywebzone 发表于 2017-9-19 22:14
函数顺序有点乱代码阅读起来比较费劲

不是专业的,业余爱好者{:1_1:}

bbbbbd 发表于 2017-9-19 23:16

chqsb123 发表于 2017-9-19 23:05
学到哪里才能做爬虫??请问?

基础知识+懂点http协议+抓包{:301_998:}

hlink1021 发表于 2017-9-21 14:04

学习一下,谢谢分享
页: [1] 2 3 4
查看完整版本: python爬取酷狗音乐播放地址