`
li_sir
  • 浏览: 115398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对新浪大片只管看不能下载说NO!

    博客分类:
  • java
阅读更多
  工作无聊,找个事情做做。想想都郁闷,前段想做销售,业务面试通过,却被人事给卡在了,MD,真是扯淡,我的销售,就这样泡汤了。

   对新浪大片的采集,大概分为一下几个步骤。

    1,java模拟get或者post请求获取大片页面内容
    2,使用正则表达式解析出播放页面地址
    3,根据播放页面地址,借助其他网站通过get或者post请求和正则表达式找出真实地址
    4,使用wget工具执行下载(wget是linux命令,windows使用,需下载安装包,然后配置 path,这样在cmd命令窗口,就可以执行wget命令了)

代码如下:
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * 
 * Title:SinaMovie

 * Description: 分析sina电影,下载电影

 * Copyright: Copyright (c) 2010

 * Company: 

 * @author libin
 * @version
 */
public class SinaMovie
{
      /**
       * @param args
       * @throws Exception 
       */
      public static void main ( String [] args )
            throws Exception
      {
            List<Movie> list = getMovieList();
            for ( Movie movie : list )
            {
                  List<String> realAddressList= movie.getRealUrlList();
                  for(String realUrl:realAddressList){
                        downLoad(realUrl);  
                  }
            }

      }

      /**
       * 获取视频首页的所有电影信息,存放入List中,因为其分页是通过异步方式,目前欠缺分页的视频抓取,需进一步研究
       * @return
       * @throws Exception 
       */
      public static List<Movie> getMovieList ()
            throws Exception
      {
            String indexUrl = "http://video.sina.com.cn/movie/category/movie/index.html";//sina电影首页地址
            String responseContent = HttpTookitEnhance.doGet(indexUrl, null, "UTF-8", false);
            System.out.println("responseContent==" + responseContent);
            String reg = "<div class=\"pic\"><a href=\"(.*?)\"(.*?)alt=\"(.*?)\"";
            Pattern p = Pattern.compile(reg);
            Matcher macher = p.matcher(responseContent);
            String preUrl = "http://video.sina.com.cn";
            List<Movie> list = new ArrayList<Movie>();
            while ( macher.find() )
            {
                  String playurl = preUrl + macher.group(1).trim();
                  System.out.println("" + playurl);
                  String name = macher.group(3).trim();
                  List<String> realUrlList = getRealAddressList(playurl);
                  System.out.println("2=========="+realUrlList.size());
                  Movie movie = new Movie();
                  movie.setName(name);
                  movie.setUrl(playurl);
                  movie.setRealUrlList(realUrlList);
                  list.add(movie);
                  break;//测试只下载一个电影

            }
            return list;
      }

      /**
       * 借助其他网站,分析出电影的真实地址,一个电影对应多个真实地址(被切分)
       * @param url 电影的网页播放地址
       * @return
       * @throws Exception
       */
      public static List<String> getRealAddressList ( String url )
            throws Exception
      {
            String _decurl = URLEncoder.encode(url, "UTF-8");
            String realurl = "http://www.flvcd.com/parse.php?kw=" + _decurl + "&flag=&format=";
            String html = HttpTookitEnhance.doGet(realurl, null, "UTF-8", false);
            Pattern p1 = Pattern.compile("<a href (.*?)\"(.*?)\"");
            Matcher m = p1.matcher(html);
            List<String> list = new ArrayList<String>();
            while ( m.find() )
            {

                  String realUrl = m.group(2).trim();
                  System.out.println("realUrl---------" + realUrl);
                  list.add(realUrl);
            }
            return list;
      }

      /**
       * 借助wget工具,执行下载(wget工具为Linuxg工具,windows使用需下载)
       * -c 断点续传 -P下载目录 --tries 重试次数
       * 测试URL:http://shb5.dhot.v.iask.com/f/1/648cd395f950c82e5bfb45d2fe47c10541885386.hlv
       * @param downUrl
       * @throws Exception
       */
      public static void downLoad ( String downUrl )
            throws Exception
      {
          System.out.println("执行下载:"+downUrl);
            Runtime run = Runtime.getRuntime();
            Process process = run.exec("cmd.exe /c wget -c -P C:\\test --tries=5 --timeout=60 " + downUrl);
            InputStream in = process.getInputStream();
           /* while ( in.read() != -1 )
            {
                  System.out.println(in.read());
            }
            in.close();*/
            //process.waitFor();  
      }
}

/**
 * 电影信息
 * 
 * Title:Movie

 * Description: 

 * Copyright: Copyright (c) 2010

 * Company: 

 * @author 
 * @version 
 */
class Movie
{
      String name;//电影名称
      String url;//播放地址
      List<String> realUrlList = new ArrayList<String>();//一个电影对应多个地址

      public String getName ()
      {
            return name;
      }

      public void setName ( String name )
      {
            this.name = name;
      }

      public String getUrl ()
      {
            return url;
      }

      public void setUrl ( String url )
      {
            this.url = url;
      }

      public List<String> getRealUrlList ()
      {
            return realUrlList;
      }

      public void setRealUrlList ( List<String> realUrlList )
      {
            this.realUrlList = realUrlList;
      }

}


由于公司网络资源,只下载一个电影,下载后的格式是hlv,改名为flv即可使用暴风影音进行播放。
HttpTookitEnhance模拟http get和post请求类,前面代码已贴出。程序还需要完善, 改用多线程执行,现在效率很低。同时请教牛人,目前只能抓取第一个页的内容,而新浪大片它的分页是通过异步的方式,我怎么获取异步过来的网页内容呢?


  参考了牛人雷哥的代码,雷哥,java之牛人也。


  
1
1
分享到:
评论

相关推荐

    我总结了一些有趣的谐音梗歪典故。针对这些歪典故,我们的态度是绝不小心求证,只管大胆胡说。

    - **梗来源**:通过“犬志龙”与“送终鸡”之间的友谊故事,传达了即使在最艰难时刻也不离不弃的情感价值。 #### 艾青的“不是你想埋,想埋就能埋” - **背景**:艾青是中国现代著名诗人。 - **梗来源**:结合...

    主管要管大事與管小事,不能只管中事.doc

    标题和描述中提到的核心知识点是关于管理者的角色和责任,特别是如何平衡对“大事”、“小事”和“中事”的管理...对于个人来说,也要培养类似的习惯,既能把握大局,又能关注细微,不断提升自身在管理和执行上的能力。

    【《只管向前奔跑》阅读答案】只管向前奔跑.docx

    《只管向前奔跑》这篇文章讲述了贝基拉,一个来自埃塞俄比亚的贫苦男孩,从小就梦想成为一名长跑健将。然而,家庭的贫困让他感到自卑和困扰,因为贫穷的他无法负担训练费用,甚至连一双普通的跑鞋都买不起。在一次...

    示波器设计实例 免费的 只管下载就可以

    根据提供的文件信息,本文将对其中涉及的数字信号处理中的滤波器设计方法进行详细的解析与总结,主要包括无限冲激响应(IIR)滤波器的设计方法以及有限冲激响应(FIR)滤波器的设计方法。 ### 一、无限冲激响应(IIR)...

    人工智能-项目实践-信息系统-超市前后台管理系统分为前台和后台两个部分 前台只管收银,后台只管商品的维护以及数据的处理

    前台只管收银,后台只管商品的维护以及数据的处理。前台只限于售货员登录,后台只限管理员登录。前台主要:售货员对客户购买的商品进行结算处理(扫码辨认、收银、结算、找零)。后台主要:对商品维护(添加、修改、...

    《只管去做》读书笔记ppt模板

    《只管去做》读书笔记ppt模板,本模板共15P,人的四种状态,年度计划为什么总实现不了,如何设定一个走心的年度计划,给自己写一封 五年后的信,平衡人生九宫格,抬头看路低头走路,如何培养一个好习惯,用4D工作法...

    一键排版软件,让你只管写完,排版自动化

    为所有那些每天辛勤耕耘的人们,提供一个文章排版的捷径,用这个软件可以让你不去考虑文章的段落和错行,只管写完,然后,排版的工作就交给它,它的工作会令你以外的惊喜.............................................

    室外猫狗数据集-大概640张

    1.数据源头提供者,可提供各种场景数据资料,有需求请联系我! 2.数据会分多次上传,供开发者训练使用,用的好请点赞! 3.数据是算法模型训练之...6.价格全网最低,需要什么只管吩咐,只有想不到,没有接不了的数据哦!

    2700刷机教程及刷后设置说明

    * 整个过程大约持续10多分钟的样子,在此期间不能断电,不能拔网线,升级完毕机子会自动重启恢复正常。 2. 升级后的设置教程 由于升级后的版本是新加坡的版本,在这个版本下面无论你输入的账号是什么,机子都会...

    Apache Cassandra

    Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。Cassandra的主要特点就是它不是一个数据库,而是由一堆...对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。

    ES 文件浏览器 安卓版

    安卓不错的管理软件,方便管理!更只管的管理手机中的个个不同的,资源!上传下载!查看方便!

    计算机软件毕业设计+sql人才网站设计-计算机毕业设计源码-计算机毕业设计源代码.rar

    改以上三项为你MSSQL数据库的相应名称即可,其他选项切勿修改,否则不能保证系统正常运行(公开了Code的用户除外)。 2、配置好你人才网目录所在的IIS,创建好人才网的应用程序目录。使.NET程序能正常在IIS下运行。 ...

    asp.net+sql人才网站设计(源代码+论文)

    改以上三项为你MSSQL数据库的相应名称即可,其他选项切勿修改,否则不能保证系统正常运行(公开了Code的用户除外)。 2、配置好你人才网目录所在的IIS,创建好人才网的应用程序目录。使.NET程序能正常在IIS下运行。 ...

    Linux C编程一站式学习.chm

    有些地方为了叙述得完整,也会引用后面要讲的内容,比如说“有关XX我们到XX章再仔细讲解”,凡是这种引用都不是必要的依赖,可以当它不存在,只管继续往下看就行了。 尽量做到每个知识点直到要用的时候才引入。过早...

    进销存管理系统

    进销存管理系统源码,不要多问,只管下来看就是了!

    安全帽数据-第八弹(200张)

    1.数据源头提供者,可提供各种场景数据...6.价格全网最低,需要什么只管吩咐,只有想不到,没有接不了的数据哦! 7.本资源包含佩戴安全帽的数据,也包含没有佩戴安全帽的数据,各种角度都有,各种安全帽的颜色也都包含

    还原Word_GoBuy(1).docx

    2. 创业投资风险管理:文件中提到,和传统代运营公司相比,他们只分店铺挣的米,不挣米他们是不收任何费用。等于风险共摊。这说明,在创业过程中,风险管理是非常重要的,企业需要设法规避风险,分摊风险,避免可能...

    54第二十九回 单行模式只管小数点,网抓图.mp4

    Python原来这么简单(win系统 提高篇)

Global site tag (gtag.js) - Google Analytics