利用JAVA发掘(爬取)酷狗流行音乐(或评论)

博主通过JAVA编写爬虫,抓取手机酷狗APP的高评论数歌曲信息。使用Fiddler进行抓包,发现歌曲的Hash值是关键,能获取评论和关联歌单等数据。文章主要讲解了模拟发包和注意的参数细节。
摘要由CSDN通过智能技术生成



前些天偶然听到了某首歌, 发现挺好听的,然后打开歌曲评论,发现评论数竟然高达80多万,紧接着我又看了下歌曲的发行日期,17年的,看到这就不能忍了,像我这种音乐达人(自恋一会大笑)怎麽能不知道这种好歌呢!!!


然后刚好最近考完试,于是决定写个类似的爬虫程序来爬取高评论数歌曲,好了,废话不多说,下面开始介绍下程序吧。


针对的是手机酷狗app(为啥不是别的我就懒得说了,没有啥原因),然后是Fiddler对手机抓包,抓包过程我就省略了。


抓包研究一会后,发现每首歌曲关键的地方是它对应的Hash值,通过这个Hash可以获取到诸多信息,比如评论,关联歌单信息等等。

然后主要就是模拟发包了,特别要注意包内的参数,具体参见代码注释吧!


import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * @author As_
 * @since 2018/07/07
 * @email apknet@163.com
 * @github https://github.com/apknet
 *
 */

public class Main {
//    public static int n = 0;
    public static Map mapKey = new HashMap();
    public static void main(String[] args) {
     //以抓包获取到的某首歌曲Hash值为着手点
     //c3e7e3306a10374b801cc39e0de6bdca
        try {
//外面for遍历入口歌曲关联的歌单,里面for遍历每个歌单内的歌曲列表。如果想更大范围内爬取,可以多加几次循环!
            for(String colId : musToCol("c3e7e3306a10374b801cc39e0de6bdca")){
                for(Map.Entry<String, String> map : colToHash(colId).entrySet()){
                    hashToComment(map);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //由歌曲Hash提取推荐歌单
    static List<String> musToCol(String hash) {
        //仅更改歌曲Hash即可得到关联歌单信息
        //网址参数能减少的我都尽量减了,剩下差不多都是些必要参数
        String str = String.format("http://servicegz.mobile.kugou.com/v1/yueku/special_album_recommend?api_ver=1&album_audio_id=29010106&num=30&hash=%s", hash);
//        String str = "http://servicegz.mobile.kugou.com/v1/yueku/special_album_recommend?api_ver=1&album_audio_id=29010106&num=10&hash=791A040895D0D7998F63E0D9DACBE5B6";
        List<String> list = new ArrayList<>();
        try {
            URL url = new URL(str);
            InputStream in = url.openStream();
            BufferedReader reader = new 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值