java获取b站动态列表地址,java获取B站弹幕文件的两种方案

(一)实现思路

1,定位弹幕文件

一般用json或xml格式来保存弹幕,所以我们只要找到视频网页里面的xml文件或json文件,就能定位到弹幕文件。

2,解析弹幕文件

然后通过jsoup解析文件,提取我们弹幕的文本内容。

(二)第一个实现方案,解析本地文件

1,定位弹幕文件

比如我们希望爬取下方视频的弹幕文件。d9134e4a4697a4999843f72cf2bd7c0b.png

打开Chrome的Network后刷新网页,再输入框中输入xml筛选出xml文件资源:cd200d95983d01bc323866b38b8e1bd2.png

光标移动到该文件上,可以看到该文件具体地址如下:580e82c060ea19dd54b13cf751e5f9cb.png

在该文件上右键Open in new tab就可以在新的浏览器页面查看该弹幕文件内容:883a6200ea1129b64d7f7c0962b5bcf3.png

2,解析弹幕文件

2.1 创建基本的maven项目

ca81611e78c5daf73cc30b87b70cc600.png

输入GroupId和ArtifactId2a7d52b77baa16cb211f062fd5da18d9.png

本项目中会使用到jsoup这个jar包,于是在项目根目录下创建lib目标,把jar拷贝进去,然后按下面操作将jar包构建到项目中:3e66d42c88377f3aa2632da0417d462b.png

选中该jar并点击OK。7d80ab57df78592bd74c8ba348a0714a.png

2.2 在项目根目录下创建弹幕文件

在根目录下创建3232417.xml文件,复制https://comment.bilibili.com/3232417.xml弹幕页面的内容,保存到该文件中。直接全选复制过去即可,我们后面解析文件的时候只会提取有用的文本,所以第一行内容不用去除,如下:c45532d4d5a3e62d8249e2ae8726c3c2.png

2.3 代码实现

解析本地弹幕xml文件的代码如下:

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import java.io.File;

import java.util.ArrayList;

/**

* Created by shuhu on 2018/1/20.

*/

public class LocalFile {

public static ArrayList getData(String fileName){

ArrayList list = new ArrayList();

try{

File input = new File(fileName);

Document doc = Jsoup.parse(input, "UTF-8");

//每条弹幕的内容都处于标签中,于是根据该标签找到所有弹幕

Elements contents = doc.getElementsByTag("d");

for (Element content : contents) {

list.add(content.text()); //将标签中的文本内容,也就是弹幕内容,添加到list中

}

} catch (Exception e) {

e.printStackTrace();

}

return list;

}

}

复制代码

在入口类Main.java中调用LocalFile类的getData方法,传入参数为xml文件名,解析每条弹幕并输出:

import java.util.ArrayList;

/**

* Created by shuhu on 2018/1/20.

*/

public class Main {

public static void main(String[] args){

ArrayList items = new ArrayList();

//1,通过解析本地文件的方式得到所有弹幕

items = LocalFile.getData("3232417.xml");

//遍历输出每条弹幕

for (String item : items) {

System.out.println(item);

}

}

}

复制代码

输出结果如下:8fb53479c6beef4f9a911998783eb56b.png

(三)第二个实现方案,解析远程服务器文件

1,添加httpclient依赖

由于需要访问远程服务器,所以用到了相关的依赖,该依赖提供了对http服务器的访问功能。在pom.xml文件中添加:

org.apache.httpcomponents

httpclient

4.3.3

复制代码

2,实现代码

import org.apache.http.HttpEntity;

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.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import java.util.ArrayList;

/**

* Created by shuhu on 2018/1/20.

*/

public class RemoteFile {

public static ArrayList getData(String fileName) throws IOException {

ArrayList list = new ArrayList();

//1,创建HttpClient对象,我们使用到Apache中的HttpClient的实例CloseableHttpClient

CloseableHttpClient httpclient = HttpClients.createDefault();

//2,创建HttpGet请求实例,该实例指示向目标URL发起GET请求

HttpGet httpGet = new HttpGet(fileName);

//3,执行HttpGet请求实例,也就是发起GET请求,响应结果保存到httpResponse变量中

CloseableHttpResponse httpResponse = httpclient.execute(httpGet);

try {

//4,得到弹幕文件的文件内容

HttpEntity httpEntity = httpResponse.getEntity();

String httpHtml = EntityUtils.toString(httpEntity);

//5,解析弹幕文件,把每条弹幕放入list中

Document doc = Jsoup.parse(httpHtml, "UTF-8");

Elements contents = doc.getElementsByTag("d");

for (Element content : contents) {

list.add(content.text()); //将标签中的文本内容,也就是弹幕内容,添加到list中

}

} catch (Exception e) {

e.printStackTrace();

} finally {

httpResponse.close();

}

return list;

}

}

复制代码CloseableHttpResponse httpResponse = httpclient.execute(httpGet);执行完GET请求后,响应结果存放在httpResponse中。response.getEntity()是响应结果中的消息实体,因为响应结果中还包含其他内容比如Headers等如下图,这里我们只需要关注getEntity()消息实体即可。2fc9a76f6deddaadfb960e7ea8e0fc98.png

EntityUtils.toString(response.getEntity());返回的是服务端以流的形式写出的响应内容,比如在服务端调用的方法最后为:responseWriter.write("just do it");那么EntityUtils.toString(response.getEntity());获取的就是just do it 这句话。

这里可以简单理解为网页的html代码,即右键查看网页源代码看到的全部html代码。我们需要解析的就是这样的html代码。

在入口类Main.java中调用RemoteFile类的getData方法,传入参数为xml文件名,解析每条弹幕并输出:

import java.util.ArrayList;

/**

* Created by shuhu on 2018/1/20.

*/

public class Main {

public static void main(String[] args){

ArrayList items = new ArrayList();

//1,通过解析本地文件的方式得到所有弹幕

// items = LocalFile.getData("3232417.xml");

//2,通过解析远程服务器文件的方式得到所有弹幕

items = RemoteFile.getData("https://comment.bilibili.com/3232417.xml");

//遍历输出每条弹幕

for (String item : items) {

System.out.println(item);

}

}

}

复制代码

输出结果如下:8fb53479c6beef4f9a911998783eb56b.png

项目代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 用 Java 获取抖音弹幕可以通过抓取抖音视频播放页面的弹幕数据,再通过解析数据获取弹幕信息。具体实现可以使用网络爬虫技术,如使用 Java 的 HttpClient 库发送 HTTP 请求获取播放页面的源代码,再使用解析 HTML 的工具,如 JSoup 库解析出弹幕数据。 这是一个比较复杂的过程,需要对 Java 网络编程和 HTML 解析等技术有一定了解。在实现过程中,需要注意一些安全性问题,如防止爬虫过于频繁导致服务器负载过大。 ### 回答2: 要想获取抖音弹幕,首先需要了解抖音弹幕获取方式。抖音的弹幕实际上是通过抖音服务器返回的数据来显示的,因此要获取抖音弹幕,需要通过抓包分析抖音客户端与服务器之间的通信协议。 一种常见的获取抖音弹幕的方法是利用抖音开放平台提供的API接口。开发者可以通过申请开发者账号,获取相应的API权限。通过调用API接口,开发者可以获取到包括弹幕在内的抖音内容数据。 另一种获取抖音弹幕的方法是通过模拟抖音客户端与服务器的通信。这种方法需要对抖音客户端进行反编译,了解其网络请求的具体方式。一般来说,抖音客户端会通过网络请求获取弹幕数据,并以JSON格式返回。开发者可以自行编写代码,模拟客户端的请求,并解析返回的数据,获取弹幕信息。 无论使用哪种方法,开发者需要注意法律法规的限制,遵守相关的用户隐私保护规定。同时,抖音也对开发者访问其平台的流量进行限制,开发者需要合理使用接口进行数据获取,避免对服务器造成过大的负载。 总的来说,获取抖音弹幕需要通过抓包分析抖音客户端与服务器之间的通信协议,使用抖音的API接口或模拟客户端请求来获取弹幕数据。但需要注意法律法规和平台规定,合理使用接口,保护用户隐私。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值