实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
package com.example.demo;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@SpringBootTest
class DemoApplicationTests {
/**
* Sam
* 643003372@qq.com
* 2020-06-05 11:42
* 详细说明:https://baidu.com
*/
@Test
void main() throws Exception {
System.out.println("***********小红书***********");
this.xiaohongshu();
System.out.println("***********微博***********");
this.weibo();
System.out.println("***********B站***********");
this.bilibili();
}
@Test
void xiaohongshu() throws Exception {
Document doc = Jsoup.connect("https://www.xiaohongshu.com/discovery/item/5e92cdf70000000001009b42").get();
Elements like = doc.select(".operation-block .like span");
Elements comment = doc.select(".operation-block .comment span");
Elements star = doc.select(".operation-block .star span");
System.out.println("小红书点赞量:" like.get(0).html().toString());
System.out.println("小红书评论量:" comment.get(0).html().toString());
System.out.println("小红书收藏量:" star.get(0).html().toString());
}
@Test
void weibo() throws Exception {
String tidResponse = this.get("https://passport.weibo.com/visitor/genvisitor?cb=gen_callback", null);
// System.out.println("获取tid数据为:" tidResponse);
tidResponse = tidResponse.replaceAll("window.gen_callback && gen_callback\\(", "");
tidResponse = tidResponse.replaceAll("\\);", "");
JSONObject tidDataJson = JSONObject.parseObject(tidResponse);
JSONObject tidData = (JSONObject) tidDataJson.get("data");
String subAndSubsResponse = this.get("https://passport.weibo.com/visitor/visitor?a=incarnate&t=" URLEncoder.encode(tidData.get("tid").toString(), "UTF-8") "&w=" (Boolean.valueOf(tidData.get("new_tid").toString())?3:2) "&c=100&cb=cross_domain&from=weibo", null);
// System.out.println("获取sub和subp数据为:" subAndSubsResponse);
subAndSubsResponse = subAndSubsResponse.replaceAll("window.cross_domain && cross_domain\\(", "");
subAndSubsResponse = subAndSubsResponse.replaceAll("\\);", "");
JSONObject subAndSubsDataJson = JSONObject.parseObject(subAndSubsResponse);
JSONObject subAndSubsData = (JSONObject) subAndSubsDataJson.get("data");
//获取微博HTML页面
String Cookie = "SUB=" URLEncoder.encode(subAndSubsData.get("sub").toString(), "UTF-8") "; SUBP=" URLEncoder.encode(subAndSubsData.get("subp").toString(), "UTF-8") ";";
Connection connect = Jsoup.connect("https://weibo.com/1234692083/Ixnp6nuPk");
connect.header("Cookie", Cookie);
String html = "";
Matcher m = Pattern.compile("FM.view\\(.*\\)").matcher(connect.get().html());
while (m.find()){
String val = m.group(0);
val = val.replaceAll("FM.view\\(", "");
val = val.replaceAll("\\)", "");
JSONObject json = JSONObject.parseObject(val);
if("pl.content.weiboDetail.index".equals(json.get("ns"))){
html = json.get("html").toString();
}
}
// System.out.println(html);
Document doc = Jsoup.parseBodyFragment(html);
List<String> list = new ArrayList<>();
for (Element e : doc.select(".WB_row_line span.S_line1 em:nth-child(2)")) {
list.add(e.html());
}
System.out.println("微博转发量:" list.get(1));
System.out.println("微博评论量:" list.get(2));
System.out.println("微博点赞量:" list.get(3));
}
@Test
void bilibili() throws Exception {
Document doc = Jsoup.connect("https://www.bilibili.com/video/BV1HE411b7nj").get();
Matcher m = Pattern.compile("window.__INITIAL_STATE__=\\{.*\\}};").matcher(doc.html());
String aid = "";
while (m.find()){
String val = m.group(0);
val = val.replaceAll("window.__INITIAL_STATE__=\\{", "{");
val = val.replaceAll("\\}};", "}}");
JSONObject json = JSONObject.parseObject(val);
aid = json.get("aid").toString();
}
String response = this.get("https://api.bilibili.com/x/web-interface/archive/stat?aid=" aid, null);
// System.out.println("根据aid 获取数据为:" response);
JSONObject json = JSONObject.parseObject(response);
JSONObject data = (JSONObject) json.get("data");
System.out.println("B站点赞量:" data.get("like"));
System.out.println("B站投币量:" data.get("coin"));
System.out.println("B站收藏量:" data.get("favorite"));
System.out.println("B站转发量:" data.get("share"));
}
public String get(String url, String cookie) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(5000).setSocketTimeout(5000).build();
httpGet.setConfig(requestConfig);
httpGet.setHeader("Cookie", cookie);
CloseableHttpResponse response = client.execute(httpGet);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity resEntity = response.getEntity();
return EntityUtils.toString(resEntity);
}
return "";
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论