java平台利用jsoup开发包,抓取优酷视频播放地址与图片地址等信息。

来源:互联网 发布:系统动力学软件 介绍 编辑:程序博客网 时间:2024/04/27 17:33

/********************************************************************************************
 * author:conowen@大钟                                                                                                                          
 * E-mail:conowen@hotmail.com                                                                                                             
 * http://blog.csdn.net/conowen                                                                                                              
 * 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。      

 ********************************************************************************************/

一: 项目目的

         最近项目设计到网联网视频采集聚合,写了一个关于互联网视频的信息爬虫的小程序,以youku在线视频网站为例,实现一个java平台下的应用程序,动态抓取互联网视频信息保存到本地xml文件,构建一个多媒体播放源中心。


二:项目第三方库:

1、jsoup (HTML代码解析器)


     jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。

jsoup的主要功能如下:

·从一个URL,文件或字符串中解析HTML;

·使用DOM或CSS选择器来查找、取出数据;

·可操作HTML元素、属性、文本;

jsoup是基于MIT协议发布的,可放心使用于商业项目。

官方地址:http://jsoup.org/


2、jdom (XML构建于解析工具)

通过jdom,可以很容易地构建符合规范的xml文件,并且,jdom提供对xml文件的快速解析。

官方地址:http://jdom.org/


三:开发大体过程:

如youku(优酷)在线视频播放网站,本身就做了互联网视频聚合,就是旗下的soku,以下就已soku为例


如电视剧所对应的url地址为:http://www.soku.com/channel/teleplaylist_0_0_0_1_1.html

通过浏览器查看这个页面的HTML代码分析可知

<div class="item"><ul class="p pv"><li class="p_link"><a href="/detail/show/XMzk3MTk2" target="_blank" title="叛逃" _log_pos="1"  _log_directpos="1"></a></li><li class="p_thumb"><img original="http://g1.ykimg.com/05160000532655E067379F61EC00286C" alt="叛逃"></li><li class="p_status"><span class="status">正片</span><span class="bg"></span></li><li class="p_ishd"><span class="ico__SD" title="超清"></span></li><li class="p_title"><a href="/detail/show/XMzk3MTk2" title="叛逃" target="_blank" _log_pos="1"  _log_directpos="2">叛逃</a></li><li class="p_actor"><label>主演:</label><a href='/v?keyword=%E9%99%88%E5%B1%95%E9%B9%8F' title='陈展鹏' target='_blank' _log_pos='1'  _log_directpos='3'>陈展鹏</a> / <a href='/v?keyword=%E5%90%B4%E5%8D%93%E7%BE%B2' title='吴卓羲' target='_blank' _log_pos='1'  _log_directpos='3'>吴卓羲</a> / <a href='/v?keyword=%E9%99%88%E8%8C%B5%E5%AA%BA' title='陈茵媺' target='_blank' _log_pos='1'  _log_directpos='3'>陈茵媺</a> </li><li class="p_desc" >香港作为国际大都会,随时有可能会受到恐怖袭击。为了防止境内可能出现的恐怖活动,反恐特勤队于2009...</li><li class="p_rating"><span class="ranking">9.2</span>分</li><li class="p_panels"><div class='linkpanels site14' style='display:none;'><div class="mask"><div class="ico__loading_32"></div></div><div class="panel_15"><ul class="linkpanel"><li><a href='http://v.youku.com/v_show/id_XNjg2NTcyODI0.html' target='_blank' _log_pos='1'  _log_directpos='4'>1</a></li><li><a href='http://v.youku.com/v_show/id_XNjg3MDU2NzUy.html' target='_blank' _log_pos='1'  _log_directpos='4'>2</a></li><li><a href='http://v.youku.com/v_show/id_XNjg3NDk4NjQ0.html' target='_blank' _log_pos='1'  _log_directpos='4'>3</a></li><li><a href='http://v.youku.com/v_show/id_XNjg3OTc5MjUy.html' target='_blank' _log_pos='1'  _log_directpos='4'>4</a></li><li class="mhandle" title="显示全部"><span>...</span></li><li><a href='http://v.youku.com/v_show/id_XNjk4ODk2MjI4.html' target='_blank' _log_pos='1'  _log_directpos='4'>21</a></li><li><a href='http://v.youku.com/v_show/id_XNjk5Mzc4ODky.html' target='_blank' _log_pos='1'  _log_directpos='4'>22</a></li><li><a href='http://v.youku.com/v_show/id_XNjk5Nzk4NjEy.html' target='_blank' _log_pos='1'  _log_directpos='4'>23</a><em class="ico__newpgm"></em></li><li><a href='http://v.youku.com/v_show/id_XNzAwMjQ2ODEy.html' target='_blank' _log_pos='1'  _log_directpos='4'>24</a><em class="ico__newpgm"></em></li> <li class="catahandle" ><span qwindow_key="99299_14"><em>显示全部</em></span></li></ul><div class="clear"></div></div><div class="overlay_show" style="display: none; "><ul><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjg2NTcyODI0.html" _log_pos='1'  _log_directpos='4' >1</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjg3MDU2NzUy.html" _log_pos='1'  _log_directpos='4' >2</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjg3NDk4NjQ0.html" _log_pos='1'  _log_directpos='4' >3</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjg3OTc5MjUy.html" _log_pos='1'  _log_directpos='4' >4</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjg4Mzk0MjA0.html" _log_pos='1'  _log_directpos='4' >5</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjg5Njg2MTMy.html" _log_pos='1'  _log_directpos='4' >6</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjkwMTUxMjg0.html" _log_pos='1'  _log_directpos='4' >7</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjkwNjE4ODc2.html" _log_pos='1'  _log_directpos='4' >8</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjkxMDYyMDY4.html" _log_pos='1'  _log_directpos='4' >9</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjkxNTA1NDc2.html" _log_pos='1'  _log_directpos='4' >10</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjkyNzk3ODEy.html" _log_pos='1'  _log_directpos='4' >11</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjkzMjQ5MjU2.html" _log_pos='1'  _log_directpos='4' >12</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjkzNzE1ODQ0.html" _log_pos='1'  _log_directpos='4' >13</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk0MTQ1NDE2.html" _log_pos='1'  _log_directpos='4' >14</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk0NTk4NjU2.html" _log_pos='1'  _log_directpos='4' >15</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk1NzkwNDky.html" _log_pos='1'  _log_directpos='4' >16</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk2MjE0ODAw.html" _log_pos='1'  _log_directpos='4' >17</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk2NzA3OTAw.html" _log_pos='1'  _log_directpos='4' >18</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk3MTQ3NDg0.html" _log_pos='1'  _log_directpos='4' >19</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk3NjAyMzU2.html" _log_pos='1'  _log_directpos='4' >20</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk4ODk2MjI4.html" _log_pos='1'  _log_directpos='4' >21</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk5Mzc4ODky.html" _log_pos='1'  _log_directpos='4' >22</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNjk5Nzk4NjEy.html" _log_pos='1'  _log_directpos='4' >23</a></li><li><a target="_blank" href="http://v.youku.com/v_show/id_XNzAwMjQ2ODEy.html" _log_pos='1'  _log_directpos='4' >24</a></li> </ul><div class="clear"></div></div></div> <!-- linkpanels end --><div class='linkpanels site1' style='display:;'><div class="mask"><div class="ico__loading_32"></div></div><div class="panel_15"><ul class="linkpanel"><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/C08DUfUmLQ8.html' target='_blank' _log_pos='1'  _log_directpos='4'>1</a></li><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/9k94iBLitvc.html' target='_blank' _log_pos='1'  _log_directpos='4'>2</a></li><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/DtZl97kKHJ8.html' target='_blank' _log_pos='1'  _log_directpos='4'>3</a></li><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/bOowUNpVpps.html' target='_blank' _log_pos='1'  _log_directpos='4'>4</a></li><li class="mhandle" title="显示全部"><span>...</span></li><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/eIuEWbGBlZo.html' target='_blank' _log_pos='1'  _log_directpos='4'>21</a></li><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/04MteDKPh0k.html' target='_blank' _log_pos='1'  _log_directpos='4'>22</a></li><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/j3No8CjvPMU.html' target='_blank' _log_pos='1'  _log_directpos='4'>23</a><em class="ico__newpgm"></em></li><li><a href='http://www.tudou.com/albumplay/h_qzeM93b4o/DZqhSzIue7k.html' target='_blank' _log_pos='1'  _log_directpos='4'>24</a><em class="ico__newpgm"></em></li> <li class="catahandle" ><span qwindow_key="99299_1"><em>显示全部</em></span></li></ul><div class="clear"></div></div><div class="overlay_show" style="display: none; "><ul><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/C08DUfUmLQ8.html" _log_pos='1'  _log_directpos='4' >1</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/9k94iBLitvc.html" _log_pos='1'  _log_directpos='4' >2</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/DtZl97kKHJ8.html" _log_pos='1'  _log_directpos='4' >3</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/bOowUNpVpps.html" _log_pos='1'  _log_directpos='4' >4</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/17j0DZpn1ks.html" _log_pos='1'  _log_directpos='4' >5</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/L9BfyEe2Lnc.html" _log_pos='1'  _log_directpos='4' >6</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/wC0wkJ06oig.html" _log_pos='1'  _log_directpos='4' >7</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/t1eKauFslM8.html" _log_pos='1'  _log_directpos='4' >8</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/cpA0-6Eju_M.html" _log_pos='1'  _log_directpos='4' >9</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/kO6GYIebudU.html" _log_pos='1'  _log_directpos='4' >10</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/f9WyMO1cvAU.html" _log_pos='1'  _log_directpos='4' >11</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/ZXJJ718tUMM.html" _log_pos='1'  _log_directpos='4' >12</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/b_3VAZzRLxk.html" _log_pos='1'  _log_directpos='4' >13</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/m_V42BUl10M.html" _log_pos='1'  _log_directpos='4' >14</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/E6WlWOITEn0.html" _log_pos='1'  _log_directpos='4' >15</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/oDss8E8Ca1k.html" _log_pos='1'  _log_directpos='4' >16</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/HYY6zgJgsjY.html" _log_pos='1'  _log_directpos='4' >17</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/qk2asOj0eLE.html" _log_pos='1'  _log_directpos='4' >18</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/SejnSBUxZ0o.html" _log_pos='1'  _log_directpos='4' >19</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/K4FAUFU8_eM.html" _log_pos='1'  _log_directpos='4' >20</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/eIuEWbGBlZo.html" _log_pos='1'  _log_directpos='4' >21</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/04MteDKPh0k.html" _log_pos='1'  _log_directpos='4' >22</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/j3No8CjvPMU.html" _log_pos='1'  _log_directpos='4' >23</a></li><li><a target="_blank" href="http://www.tudou.com/albumplay/h_qzeM93b4o/DZqhSzIue7k.html" _log_pos='1'  _log_directpos='4' >24</a></li> </ul><div class="clear"></div></div></div> <!-- linkpanels end --><!--playarea end--><div class="playarea"><div class="pgm-source"><div class="source source_one"><label>播放源:</label><span name="土豆网" id="site1" sv="-9976.0"><a href="http://www.tudou.com/albumplay/h_qzeM93b4o/C08DUfUmLQ8.html"  status="更新至24集" target="_blank" speed="0" stypename="超清" stype="SD" title="土豆网-更新至24集" _log_pos="1"  _log_directpos="5"><img src="http://static.soku.com/v1.0.0749/soku/inthesky/img/favicon/tudou.png"  /></a></span><span name="优酷网" id="site14" sv="-9976.0"><a href="http://v.youku.com/v_show/id_XNjg2NTcyODI0.html"  status="更新至24集" target="_blank" speed="0" stypename="超清" stype="SD" title="优酷网-更新至24集" _log_pos="1"  _log_directpos="5"><img src="http://static.soku.com/v1.0.0749/soku/inthesky/img/favicon/youku.png"  /></a></span></div></div></div><!--playarea end--></li></ul></div>

就可以获得此视频的名称,封面图片地址,更新的状态,各个播放源的地址。


获取视频信息:

1、jsoup解析演示:

获取一个页面的内容,可以采用以下方式

Document doc = Jsoup.connect("http://example.com/").get();

得到doc就可以进行解析操作了。

当然,也可以设置一些连接参数,如浏览器userAgent,超时时间,页面内存大小等等。

对页面的解析就如同对xml解析一样,很简单。通过tab或者class标签就可以获取相应的内容了。


2、jsoup抓取youku优酷视频信息


public void getVideoInfo(String pageUrl) {// 一页调用一次try {doc = Jsoup.connect(pageUrl).maxBodySize(1024 * 1024 * 10).timeout(6000).get();// Added a maximum body response size to Jsoup.Connection, to// prevent running out of memory when trying to read extremely// large// documents. The default is 1MB.} catch (IOException e) {// TODO Auto-generated catch blockgetVideoInfo(pageUrl);System.out.println("connect error");e.printStackTrace();}divs_info = doc.getElementsByClass("p_link");// 视频专辑url,如电视剧if (divs_info != null) {if (divs_info.size() <= 0) {divs_info = doc.getElementsByClass("v_link");// 视频播放url,如资讯}urls = divs_info.select("a[href]");if (null != urls) {int i = 0;for (Element urlElement : urls) {videoTitles.add(urlElement.attr("title"));videoUrl.add(urlElement.attr("abs:href"));i++;}}}divs_thumbs = doc.getElementsByClass("p_thumb");// 获取专辑图片if (divs_thumbs != null) {thumbs = divs_thumbs.select("img[original]");if (thumbs.size() <= 0) {divs_thumbs = doc.getElementsByClass("v_thumb");thumbs = divs_thumbs.select("img[original]");}if (null != thumbs) {int i = 0;for (Element thumb : thumbs) {videoThumbUrls.add(thumb.attr("abs:original"));i++;}}}divs_pgm_source = doc.getElementsByClass("pgm-source");// 获取更新情况// divs_pgm_source.select(query)if (divs_pgm_source != null) {for (Element thumb1 : divs_pgm_source) {sourceId = thumb1.select("span");sourceUrl = thumb1.select("a");List<String> videoSourceStatus = null;List<String> videoSourceUrl = null;List<String> videoSourceId = null;//保存获取的数据,以供构建xml文件if (null != sourceId) {videoSourceId = new ArrayList<String>();for (Element thumb2 : sourceId) {videoSourceId.add(thumb2.attr("id"));}videoSourceIdList.add(videoSourceId);}if (null != sourceUrl) {videoSourceStatus = new ArrayList<String>();for (Element thumb2 : sourceUrl) {videoSourceStatus.add(thumb2.attr("status"));}videoSourceStatusList.add(videoSourceStatus);}if (null != sourceUrl) {videoSourceUrl = new ArrayList<String>();for (Element thumb2 : sourceUrl) {videoSourceUrl.add(thumb2.attr("href"));}videoSourceUrlList.add(videoSourceUrl);}}}try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

四、构建视频xml信息文件:


1、创建xml文件

xmlHelper.createXml(str, videoTitles, videoUrl, videoThumbUrls,videoSourceIdList, videoSourceStatusList,videoSourceUrlList, pageNum); // 创建xml
2、创建xml文件过程

public void createXml(String fileName, List<String> videoTitles,List<String> videoUrl, List<String> videoThumbUrls,List<List<String>> videoSourceIdList,List<List<String>> videoSourceStatusList,List<List<String>> videoSourceUrlList, int pageNum) {// 创建根节点 Element root = new Element("videoInfo");// 创建每一页的节点 Element pageElement = new Element("page");//设置页码pageElement.setAttribute("page", "" + pageNum);Document Doc = new Document(root);for (int i = 0; i < videoTitles.size(); i++) {// 创建节点 videoIdElement VideoIdElement = new Element("videoId");// 给 videoId 节点添加属性 id;VideoIdElement.setAttribute("id", ""+ (i + 1 + (pageNum - 1) * videoTitles.size()));// 填写视频信息的值VideoIdElement.addContent(new Element("videoTitle").setText(videoTitles.get(i)));VideoIdElement.addContent(new Element("videoUrl").setText(videoUrl.get(i)));VideoIdElement.addContent(new Element("videoThumbUrls").setText(videoThumbUrls.get(i)));for (int j = 0; j < videoSourceIdList.get(i).size(); j++) {Element sourceElement = new Element("source");sourceElement.setAttribute("id", ""+ videoSourceIdList.get(i).get(j));sourceElement.setAttribute("status", ""+ videoSourceStatusList.get(i).get(j));sourceElement.setAttribute("url", ""+ videoSourceUrlList.get(i).get(j));VideoIdElement.addContent(sourceElement);}// 添加每一个子视频到每一页上面pageElement.addContent(VideoIdElement);}// 添加每一页的视频到根节点上面root.addContent(pageElement);Format format = Format.getCompactFormat();format.setEncoding("utf-8"); // setEncoding 设置编码format.setIndent("");XMLOutputter XMLOut = new XMLOutputter(format);try {XMLOut.output(Doc, new FileOutputStream(fileName));} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

注意:利用jdom构建xml时,有一点要注意的就是,不设置的话,jdom构建的xml不会换行,导致xml文件异常乱,难以看懂。可以采用以下设置即可实现xml文件的换行操作。

Format format = Format.getCompactFormat();format.setEncoding("utf-8"); format.setIndent("");

解析效果图每一页大概所需时间为2~3s。页面比较大,是网络情况而定。





构建出来的xml文件如下

<?xml version="1.0" encoding="utf-8"?><videoInfo><page page="1"><videoId id="1"><videoTitle>来自星星的你</videoTitle><videoUrl>http://www.soku.com/detail/show/XMTEyNDE0NA==</videoUrl><videoThumbUrls>http://g3.ykimg.com/0516000052AD289A675839358A07B6AA</videoThumbUrls><source id="site19" status="21集全" url="http://www.iqiyi.com/v_19rrhd5t9s.html" /><source id="site17" status="21集全" url="http://www.letv.com/ptv/vplay/2234148.html" /><source id="site14" status="更新至17集" url="" /></videoId><videoId id="2"><videoTitle>食为奴</videoTitle><videoUrl>http://www.soku.com/detail/show/XMTA5MTQ1Mg==</videoUrl><videoThumbUrls>http://g4.ykimg.com/0516000052F4A2C56758390A8D0C4E55</videoThumbUrls><source id="site14" status="更新至22集" url="http://v.youku.com/v_show/id_XNjcxNTA0Mzg0.html" /><source id="site1" status="更新至22集" url="http://www.tudou.com/albumplay/mXTEnVluN7k/jeB4vVjU13s.html" /></videoId><videoId id="3"><videoTitle>屌丝男士</videoTitle><videoUrl>http://www.soku.com/detail/show/XMTA4MzkwNA==</videoUrl><videoThumbUrls>http://g1.ykimg.com/05160000519310F4670C4A1AE002FEB1</videoThumbUrls><source id="site6" status="7集全" url="http://tv.sohu.com/20121010/n354554959.shtml" /></videoId><videoId id="4"><videoTitle>屌丝男士 第三季</videoTitle><videoUrl>http://www.soku.com/detail/show/XMTE0NzU2OA==</videoUrl><videoThumbUrls>http://g4.ykimg.com/051600005305D18E6758397D8206CC34</videoThumbUrls><source id="site6" status="更新至3集" url="http://tv.sohu.com/20140225/n395573773.shtml" /></videoId>




3 0
原创粉丝点击