网易云评论 爬虫 java_网易云音乐资源爬取(登录+评论)

如何爬取网易云音乐的评论呢?

1.文本以华晨宇的《我的滑板鞋2016》为例

2.使用浏览器的工具,查找获取评论的url

07ebbb142c73

3.不难发现,此API是通过POST请求获得我们想要的评论信息的,需要POST的参数有params和encSecKey,网易为了反爬虫,加密了这2个参数,不过不要紧,下面有加密过程

07ebbb142c73

4.POST请求成功后,会得到一个JSON字符串,里面就包含了各种评论信息

07ebbb142c73

5.下面就用JAVA来实现评论的获取

AES加密工具类

import java.util.Base64;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

public class EncryptTools {

//AES加密

public static String encrypt(String text, String secKey) throws Exception {

byte[] raw = secKey.getBytes();

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

// "算法/模式/补码方式"

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

// 使用CBC模式,需要一个向量iv,可增加加密算法的强度

IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());

cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

byte[] encrypted = cipher.doFinal(text.getBytes());

return Base64.getEncoder().encodeToString(encrypted);

}

//字符填充

public static String zfill(String result, int n) {

if (result.length() >= n) {

result = result.substring(result.length() - n, result.length());

} else {

StringBuilder stringBuilder = new StringBuilder();

for (int i = n; i > result.length(); i--) {

stringBuilder.append("0");

}

stringBuilder.append(result);

result = stringBuilder.toString();

}

return result;

}

}

评论获取

public void commentAPI() throws Exception {

//私钥,随机16位字符串(自己可改)

String secKey = "cd859f54539b24b7";

String text = "{\"username\": \"\", \"rememberLogin\": \"true\", \"password\": \"\"}";

String modulus = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7";

String nonce = "0CoJUm6Qyw8W8jud";

String pubKey = "010001";

//2次AES加密,得到params

String params = EncryptTools.encrypt(EncryptTools.encrypt(text, nonce), secKey);

StringBuffer stringBuffer = new StringBuffer(secKey);

//逆置私钥

secKey = stringBuffer.reverse().toString();

String hex = Hex.encodeHexString(secKey.getBytes());

BigInteger bigInteger1 = new BigInteger(hex, 16);

BigInteger bigInteger2 = new BigInteger(pubKey, 16);

BigInteger bigInteger3 = new BigInteger(modulus, 16);

//RSA加密计算

BigInteger bigInteger4 = bigInteger1.pow(bigInteger2.intValue()).remainder(bigInteger3);

String encSecKey= Hex.encodeHexString(bigInteger4.toByteArray());

//字符填充

encSecKey= EncryptTools.zfill(encSecKey, 256);

//评论获取

Document document = Jsoup.connect("http://music.163.com/weapi/v1/resource/comments/R_SO_4_437859519/").cookie("appver", "1.5.0.75771")

.header("Referer", "http://music.163.com/").data("params", params).data("encSecKey", encSecKey)

.ignoreContentType(true).post();

System.out.println("评论:" + document.text());

}

那么如何登录网易云音乐呢?

1.查找登录的API地址(在浏览器登录一次,在network中查看url)

07ebbb142c73

Paste_Image.png

2.查看登录时post需要提交的参数

07ebbb142c73

Paste_Image.png

3.是不是很熟悉?和刚才获取评论的时候一样,该如何做呢?看看下面的示例代码

在上面AES加密工具类中添加MD5加密方法

public static String md5(String pwd) {

try {

MessageDigest digest = MessageDigest.getInstance("md5");

byte[] bs = digest.digest(pwd.getBytes());

String hexString = "";

for (byte b : bs) {

int temp = b & 255;

if (temp < 16 && temp >= 0) {

hexString = hexString + "0" + Integer.toHexString(temp);

} else {

hexString = hexString + Integer.toHexString(temp);

}

}

return hexString;

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

return "";

}

登录请求

public void loginAPI(String username, String password) throws Exception {

password = EncryptTools.md5(password);

// 私钥,随机16位字符串(自己可改)

String secKey = "cd859f54539b24b7";

String text = "{\"username\": \"" + username + "\", \"rememberLogin\": \"true\", \"password\": \"" + password

+ "\"}";

String modulus = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7";

String nonce = "0CoJUm6Qyw8W8jud";

String pubKey = "010001";

// 2次AES加密,得到params

String params = EncryptTools.encrypt(EncryptTools.encrypt(text, nonce), secKey);

StringBuffer stringBuffer = new StringBuffer(secKey);

// 逆置私钥

secKey = stringBuffer.reverse().toString();

String hex = Hex.encodeHexString(secKey.getBytes());

BigInteger bigInteger1 = new BigInteger(hex, 16);

BigInteger bigInteger2 = new BigInteger(pubKey, 16);

BigInteger bigInteger3 = new BigInteger(modulus, 16);

// RSA加密计算

BigInteger bigInteger4 = bigInteger1.pow(bigInteger2.intValue()).remainder(bigInteger3);

String encSecKey = Hex.encodeHexString(bigInteger4.toByteArray());

// 字符填充

encSecKey = EncryptTools.zfill(encSecKey, 256);

// 登录请求

Document document = Jsoup.connect("http://music.163.com/weapi/login/").cookie("appver", "1.5.0.75771")

.header("Referer", "http://music.163.com/").data("params", params).data("encSecKey", encSecKey)

.ignoreContentType(true).post();

System.out.println("登录结果:" + document.text());

}

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬取网易云音乐,需要先了解其接口网易云音乐接口文档可以在其官方网站上找到,其中包括了歌曲、歌手、专辑、排行榜等数据的接口。 接下来,你可以使用Java的HttpURLConnection或者HttpClient等类库,发送HTTP请求,获取数据。例如,你可以使用以下代码获取网易云音乐热门歌曲: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class NetEaseMusicCrawler { public static void main(String[] args) { try { // 设置请求URL URL url = new URL("https://music.163.com/api/playlist/detail?id=3779629"); // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方式 connection.setRequestMethod("GET"); // 获取响应结果 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line; StringBuilder result = new StringBuilder(); while ((line = reader.readLine()) != null) { result.append(line); } reader.close(); // 输出结果 System.out.println(result.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码中,我们通过URL访问网易云音乐的热门歌曲接口,并使用HttpURLConnection发送GET请求。最后,我们将响应结果输出到控制台。 注意,为了避免被封IP,爬取数据时需要设置合理的请求间隔时间,并且不要过于频繁地请求同一个接口。另外,需要注意网易云音乐接口可能会随时更新,需要及时更新代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值