不学网

 找回密码
 立即注册

只需一步,快速开始

手机号码,快捷登录

查看: 149|回复: 1

[python] 酷狗音乐爬虫

[复制链接]
rain1994 发表于 2018-6-9 11:13:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 rain1994 于 2018-6-9 11:34 编辑

1.主要参考网上的例子
2.正则匹配失败
3.修改调试运行成功
  1. # -*- coding:utf8 -*-
  2. import sys
  3. import requests
  4. import re
  5. import json
  6. import urllib.request
  7. # reload(sys)
  8. # sys.setdefaultencoding( "utf-8" )

  9. #搜索获取音乐列表
  10. def get_music_info(url):
  11.     response = requests.get(url)
  12.     return parse_music_info(response.text)
  13. #解析音乐列表
  14. def parse_music_info(html):
  15.     text=html
  16.     index=text.find('(', 0)
  17.     aa=len(text);
  18.     bb=aa-2;
  19.     text=text[index+1:bb]
  20.     print(text)
  21.     text=json.loads(text )
  22.     text=text['data']
  23.     text=text['lists']
  24.     # pattern = re.compile('{"SongName":.*?"Grp":.*?[]|}],"AlbumPrivilege":.*?}')
  25.     # result = re.findall(pattern, html)
  26.     result=text
  27.     for item in result:
  28.         # item = json.loads(item )
  29.         yield [item['FileName'],item['AlbumID'],item['AlbumName'],item['Duration'],item['FileHash']]
  30. #跳转到每个歌曲的详细页面
  31. def get_play_url(hash_id,album_id):
  32.     url = 'http://www.kugou.com/yy/index.php?r=play/getdata&hash='+hash_id+'&album_id='+album_id+'&_=1505738969338'
  33.     response = requests.get(url)
  34.     return parse_play_url(response.text)
  35. #解析歌曲的播放地址
  36. def parse_play_url(html):
  37.     pattern = re.compile('"play_url":"(.*?)"')
  38.     result = re.findall(pattern, html)
  39.     if result:
  40.         return result[0].replace('\\','')
  41. #程序入口
  42. def main(keyword):
  43.     # keyword='王菲'
  44.     keyword = urllib.parse.quote(keyword)
  45.     print(keyword)
  46.     url = 'http://songsearch.kugou.com/song_search_v2?callback=jQuery112405213552049562944_1505739248953&keyword='+keyword+'&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter'
  47.     # html = get_music_info(url)
  48.     for item in get_music_info(url):
  49.         play_url = get_play_url(item[4],item[1])
  50.         second = int(item[3])%60
  51.         second = str(second) if second > 10 else '0'+str(second)
  52.         print ('歌名:'+str(item[0]),'专辑:'+ str(item[2]),'时长:'+str(int(item[3])/60)+':'+second,play_url)

  53. main('王菲')
复制代码
网易云音乐的爬虫,查看搜索时的请求,找到列表再找到播放音乐页面的id
http://music.163.com/#/song?id=476592630
ID就是476592630
然后将ID替换到链接 http://music.163.com/song/media/outer/url?id= .mp3 中
如:http://music.163.com/song/media/outer/url?id=476592630.mp3



aa.png
回复

使用道具 举报

mobea 发表于 2018-6-9 13:50:37 来自手机 | 显示全部楼层
感谢大牛的技术分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|不学网

GMT+8, 2018-6-21 16:45

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表