Android 获取网页的视频链接

来源:互联网 发布:网络机顶盒品牌排行 编辑:程序博客网 时间:2024/04/27 11:44

     10.16  青岛      阴

      近来,想取某网站的视频做数据源,经别人帮忙爬取了视频链接后发现,视频的连接会在1--2小时后就失效了。经研究发现,每次打开包含视频链接的网页,网页内的视频连接地址都是不一样的,想来是加了些防爬取处理了。想要取视频链接,只要他的网页连接不变,直接解析网页好了,可能你会说,为什么不解析son,原因呢,想这种网站,json都是加密的,用解析器解析出来的也是一堆的源码。

       解决方案:

        1.先下载jsoup的架包并导入。解释下,jsoup是专门用来解析html数据的,像解析json的Gson似的,具体用法稍后说。

        2.  在拿到html的链接后,通过webview获取到html数据。

<pre name="code" class="java">        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('<head>'+" + "document.getElementsByTagName('html')[0].innerHTML+'</head>');");                    }                    @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 就是网页的数据 </span>         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的 某个属性获得链接
这个返回的string就是你所需要的具体连接了。

       其实jsoup有个Jsoup.connect()方法,是可以自己获取网页的,但是有些网页通过这种HttpURLConnection打开网页是不会出现视频链接,通过WebView模拟一下浏览器打开方式是有的,再获取到具体网页通过jsoup解析。jsoup还有好多的方法,可以有不同的方式解析html,具体就不一一介绍了。

       以上是我的个人理解,如果不对,欢迎留言指正,谢谢。

参考文章:http://blog.csdn.net/hellohaifei/article/details/9331631

      

1 0