- 论坛徽章:
- 1
|
一种方法是从下载页入手,一行命令,一些管道组成.- wget -O- http://music.baidu.com/top/dayhot | grep -oP '(?<=.sid.: .)\d+' | sed 's#.*#http://music.baidu.com/song/&/download/#' | wget -O- -i- | grep -oP '(?<=song_title:")[^"]+|(?<=singer_name:")[^"]+|(?<=<a href="/data/music/file\?link=)[^"]+|(?<=<a href=")http.+?(?= " id="download")|height:70px' | awk 'NR%3==1{url=$0}NR%3==2{name=$0}NR%3==0{system("wget -O \""name".mp3\" \""url"\"")}'
复制代码 不幸的是,下载页格式不统一.有三种:
http://music.baidu.com/song/1449893/download?__o=%2Ftop%2Fdayhot
http://music.baidu.com/song/922519/download?__o=%2Fsong%2F922519
http://music.baidu.com/song/23473715/download?__o=%2Ftop%2Fdayhot
会导致一些歌曲无法下载.
另外一种比较稳定简单的方法是通过播放页的请求歌曲url的ajax接口 http://play.baidu.com/data/music/songlink?songIds=1449893
有个问题是,返回的中文名是Unicode编码的,比如"songName":"\u4eb2\u5bc6\u7231\u4eba",你要用一些工具(比如iconv,甚至python,perl)将\u4eb2\u5bc6\u7231\u4eba转换成汉字"亲密爱人".
第二种方式,我没写,不过稍微改一改,就行了. |
|