手机网页视频抓取(有些网页通过这种HttpURLConnection打开网页是不会的源码(图))

优采云 发布时间: 2021-12-19 00:01

  手机网页视频抓取(有些网页通过这种HttpURLConnection打开网页是不会的源码(图))

  10.16 青岛银

  最近想拍一个网站的视频作为数据源。有人帮忙爬取视频链接后,发现1-2小时后视频链接失效。研究发现,每次打开收录视频链接的网页时,网页中的视频链接地址都不同。我想添加一些反爬虫处理。如果要获取视频链接,只要他的网页连接不变,直接解析网页即可。你可能会说,你为什么不解析儿子呢?原因是网站,json是加密的,使用解析处理器解析出来的也是一堆源码。

  解决方案:

  1. 首先下载jsoup包并导入。说明下,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人工客服


线