Android 获取网页的视频链接

     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

      

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值