啦啦啦,之前一直在做個音樂網站,然後涉及到了歌詞,可當時自己不懂歌詞的爬取鏈接,所以一直採用的手錄歌詞的方法,費時又費力。前兩天在一篇CSDN文章上發現了網易雲的歌詞鏈接。然後就立馬利用起來爬取一撥歌詞...鏈接如下所示
http://music.163.com/api/song/lyric?id="+id+"&lv=1&kv=1&tv=-1
鏈接裏面其實返回的是包含歌詞的json信息,如果要得到純歌詞,還要對其進行一番提取。目前可以操作json的jar包也還挺多的。不過嘛,我也沒心思去學習使用,所以一般都是自寫方法去提煉需要的信息,雖然麻煩點,但也還好啦,能得到想要的結果。
如下是爬取歌詞的代碼
1.首先定義二維數組,包含所有要下載歌詞的歌曲名以及在網易雲音樂上的id
private static String song[][]={
{"25643328","信仰-張信哲"},{"254574","後來-劉若英"},{"174934","無顏女-徐良,小凌"},{"174962","和平分手-徐良"},{"26609879","情話-徐良,孫羽幽"},
{"174960","犯賤-徐良"},{"174961","紅裝-徐良"},{"25918133","那時雨-徐良"},{"27890395","抽離-徐良,劉丹萌"},{"174963","客官不可以-徐良,小凌"},
{"26609877","七秒鐘的記憶-徐良,孫羽幽"},{"375381","不想長大-S.H.E"},{"354620","只對你有感覺-飛輪海 ,田馥甄"},{"167815","情侶裝-許嵩"},{"394748","棉花糖-至上勵合"},
{"122535","最後一次的溫柔"},{"28853662","秋殤別戀"},{"452986458","紅昭願"},{"486111543","7538(Me U-Remix)"},{"515143305","9420"},
{"31134193","出賣"},{"31654343","不將就"},{"29764564","自拍"},{"27731177","太坦白"},{"27731176","模特"},
{"29764562","作曲家"},{"133998","老街"},{"27678655","李白"},{"149787","我不是沒臉的男孩"},{"25864481","微情歌"},
{"149751","那些學校沒有教過的事兒"},{"25640407","一千個分手的理由"},{"149778","最簡單的聲音"},{"149789","致命的甜蜜"},{"149763","畢業後你不是我的"},
{"167888","認錯"},{"167873","多餘的解釋"},{"167827","素顏"},{"167876","有何不可"},{"553755659","可不可以-張紫豪"},
{"175072","不再聯繫-夏天Alex"},{"28661853","我配不上你-夏天Alex"},{"69827","太多-陳冠蒲"},{"156193","爲你寫詩"},{"1330348068","起風了"},
{"77131","有多少愛可以重來-迪克牛仔"},{"26599373","當我孤獨時還可以抱你-鄭源"},{"27808044","醜八怪-薛之謙"},{"169185","認真的雪-薛之謙"},{"415792881","剛剛好-薛之謙"},
{"27955654","其實-薛之謙"},{"32192436","紳士-薛之謙"},{"32507038","演員"},{"163123","秋天不回來-王強"},{"5256103","死了都要愛"},
{"19081573","Util You"},{"2006865","Only Love"},{"19081569","Breathless"},{"21157332","One Day"},{"472361096","Despacito (Remix)"},
{"25795016","有沒有人告訴你-陳楚生"},{"165367","三國殺-汪蘇瀧"},{"36990266","Faded-Alan Walker&Iselin Solheim"},{"150361","三國戀-Tank"},{"77437","2002年的第一場雪-刀郎"},
{"557584888","往後餘生-馬良"},{"486814412","沙漠駱駝"},{"29019227","sugar"},{"1210461","what are words"},{"28832241","superheroes"},
{"4875306","逍遙嘆"},{"4872532","愛的華爾茲"},{"4872530","讓我爲你唱首歌"},{"413812448","大魚"},{"110184","謝謝你的愛"},
{"178176","擦肩而過"},{"88926","想你的夜"},{"526464293","空空如也"},{"523251118","說散就散"},{"4172882","Fairy Tale"},
{"126443","窗外"},{"482999696","夏至未至"},{"483671599","追光者"},{"569200213","消愁"},{"569213220","像我這樣的人"},
{"28481105","機器鈴 砍菜刀-張衛"},{"28240119","倍兒爽-大張偉"},{"413829859","童話鎮-暗槓"},{"95843","梔子花開-何炅"}
};
2.接下來寫方法爬取
/**
* @desc 爬取歌詞並下載
* @author zcl
* @date 2019年4月5日
* @param id 歌曲的id
* @param name 歌曲名
* @throws IOException
*/
public static void downloadLyric(String id,String name) throws IOException{
String lyricUrl="http://music.163.com/api/song/lyric?id="+id+"&lv=1&kv=1&tv=-1";
Document doc=Jsoup.connect(lyricUrl).get();
String lyric=doc.toString();
lyric=lyric.substring(lyric.indexOf("lyric\"")+8, lyric.indexOf("klyric")-4);//去掉其他json格式
lyric=lyric.replace("\\n", "\r");//\n替換爲\r
writeToFile(lyric, name);
}
3.再接下來定義方法,將爬取到的歌詞下載至本地文件中
/**
* 輸出歌詞至指定文件中
* @desc
* @author zcl
* @date 2019年4月5日
* @param lyric 爬取的歌詞
* @param name 歌曲名即保存的文件名
* @throws IOException
*/
public static void writeToFile(String lyric,String name) throws IOException{
File file=new File("E:/AAAA/alyric/"+name+".txt");
file.createNewFile();
FileOutputStream fos=new FileOutputStream(file);
fos.write(lyric.getBytes());
System.out.println("已保存《"+name+"》的歌詞至“"+file.getAbsolutePath()+"”文件");
}
4.最後,在main函數中執行循環來逐個下載歌詞。
for(int i=0;i<song.length;i++){
downloadLyric(song[i][0],song[i][1]);
}
本篇博文已同步至本人個人博客網站,歡迎訪問
歡迎大家訪問我的視頻網站哆啦網,註冊並登陸後即可擁有發表評論,記錄自己的播放,搜索,登陸記錄以及收藏視頻等功能。我在553影院等你