安卓网页视频抓取工具(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,我就不一一介绍了。

  以上是我个人的理解。如有错误请留言指正,谢谢。

  参考文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线