安卓网页视频抓取工具(10.16青岛阴近来视频连接会在1-2小时后失效)
优采云 发布时间: 2022-01-30 11:17安卓网页视频抓取工具(10.16青岛阴近来视频连接会在1-2小时后失效)
10.16 青岛尹
最近想用某网站的视频作为数据源。有人帮忙抓取视频链接后,发现视频链接会在1--2小时后失效。经过研究发现,每次打开收录视频链接的网页,网页中的视频链接地址都不一样。我认为已经添加了一些反爬虫处理。如果要获取视频链接,只要他的网页连接不变,直接解析网页即可。也许你会说,为什么不解析子,原因,想到这个网站,json是加密的,使用解析器也是一堆源码。
解决方案:
1.下载jsoup rack包并导入。说明一下,jsoup是专门用来解析html数据的,和Gson解析json一样,具体用法后面会讲。
2. 获取html链接后,通过webview获取html数据。
WebView mWebView=new WebView(this);
//允许执行javascript语句
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
mWebView.loadUrl(videoUrl);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:window.local_obj.showSource(''+" + "document.getElementsByTagName('html')[0].innerHTML+'');");
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl); }
});
final class InJavaScriptLocalObj{
@JavascriptInterface
public void showSource(String html) {
//html 就是网页的数据
System.out.println("====>html="+html); }
}
3.获取网页数据后,使用jsoup解析网页。如果要解析json,分析它的结构,在电脑浏览器F12查看它的结构,看到需要的链接在html节点下。再次通过
Document doc = Jsoup.parse(html);
Element element = doc.getElementById("tt-video-video"); //搜索搜索节点的id 获得element
String videoUrl = element.attr("src"); // 通过element的 某个属性获得链接
返回的字符串是您需要的特定连接。
其实jsoup有一个Jsoup.connect()方法,可以自己获取网页,但是有些网页通过这个HttpURLConnection打开网页,没有视频链接。有办法通过WebView模拟浏览器打开,然后通过jsoup解析得到具体的网页。jsoup中的方法也很多,可以用不同的方式解析HTML,我就不一一介绍了。
以上是我个人的理解。如有错误请留言指正,谢谢。
参考文章: