本文使用的工具有vlc+ffmpeg+phantomjs,git源码:https://github.com/GethinWang/VideoCrawler

  一般视频网站的视频地址暴露的方式有两种:

1、html直接暴露

2、通过ajax异步返回。

  A站使用的方式是第二种。针对第一种方式,直接使用jsoup就可以解析出视频地址,但是大部分网站都不会采取这种方式,而是选择第二种。

  进入浏览器按下f12(这里我使用firefox)

  

  可以看到,传输的ts分片。这些分片是一块块小视频,大概只有几秒左右,但是这些视频能够拼接成一个完整的视频地址。而这些视频地址的地址其实被存放在一个m3u8的文件中,但通过浏览器没办法直接看到m3u8文件,因此这里使用phantomjs。

这是一款没有界面的模拟浏览器,可以模拟浏览器获取ajax请求,通过分析,可以看到返回结果中有m3u8文件。

因此,我们可以拿到m3u8文件,然后使用vlc就可以进行播放,也可以使用ffmpeg将m3u8文件转换成mp4文件。

  播放器效果如上。

  ffmpeg合并m3u8文件命令为

String exec = rootPath + "/ffmpeg.exe -i \"" + url + "\" -vcodec copy -acodec copy -absf aac_adtstoasc " + output;

  这两款软件我都是使用java代码调用exe执行的。

  phantomjs核心代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

//phantomjs模拟请求   

public List<String> getVideoUrls(String url) {

        List<String> ans = new ArrayList<String>();

        System.out.println("==============================开始解析网页==============================");

        try {

            Runtime rt = Runtime.getRuntime();

            String exec = rootPath + "/phantomjs.exe " + rootPath + "/code.js " + url;

            Process p = rt.exec(exec);

            InputStream is = p.getInputStream();

            BufferedReader br = new BufferedReader(new InputStreamReader(is));

            StringBuffer sbf = new StringBuffer();

            String tmp = "";

            while ((tmp = br.readLine()) != null) {

                sbf.append(tmp);

            }

            String urls = sbf.substring(sbf.indexOf("cdnUrls"));

            urls = urls.substring(0,urls.indexOf("playUrls"));

            urls = urls.substring(urls.indexOf("[")+1,urls.lastIndexOf("]"));

            String[] paths = urls.split(",");

            for (String path : paths) {

                if(path.contains("url")){

                    ans.add(path.substring(path.indexOf(":")+2,path.length()-1));

                }

            }

            System.out.println("==============================结束解析网页==============================");

            System.out.println("播放地址为:");

            for (String an : ans) {

                System.out.println(an);

            }

        }catch (Exception e){

            System.out.println("ERROR!"+e);

        }

        return ans;

    }

这里,还需要配置一个js代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

system = require('system'

address = system.args[1];

var page = require('webpage').create(); 

page.settings.userAgent= 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR2.0.50727)';

var url = address; 

page.open(url, function (status) { 

    //Page is loaded! 

    if (status !== 'success') { 

        console.log('Unable to post!'); 

    } else

            window.setTimeout(function () {

              page.render("test1.png");

              console.log(page.content);

              phantom.exit();

          }, 5000);  

    }

  });  

写文章不容易,转载请注明出处,git源码:https://github.com/GethinWang/VideoCrawler ,觉得好给个star吧~

A站(ACFun)爬虫爬取并播放、下载视频(JAVA)相关推荐

  1. python爬取app播放的视频,Python爬虫工程师必学——App数据抓取实战视频教程

    爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.本课程主要为同学讲解如何用python实现App数据抓取,课程从开发环境搭建,App爬虫必备利器详解,项目实战,到最后的多App ...

  2. 爬虫爬取qq看点视频

    我的上一篇文章有讲到graia机器人配置的问题,这次用他和爬虫实现一个比较有趣的东西 群友在查看电脑端qq看点的分享视频时会出现这种情况无法查看,但也并不是完全没有办法获取到视频的链接 mcl中我们可 ...

  3. 使用爬虫爬取豆瓣电影影评数据Java版

    2019独角兽企业重金招聘Python工程师标准>>> 近期被<我不是药神>这部国产神剧刷屏了,为了分析观众对于这部电影的真实感受,我爬取了豆瓣电影影评数据.当然本文仅讲 ...

  4. 如何用迅雷下载python_使用python爬虫爬取迅雷侠下载,呵呵,你懂得

    啥也不说了,直接上代码 #!python3 import urllib.request from lxml import etree import threading from multiproces ...

  5. 使用python爬虫爬取秒懂百科的视频

    仅供学习交流使用,如有侵权,联系删除. python 爬虫抓取百度百科视频源代码 from urllib.parse import quote from bs4 import BeautifulSou ...

  6. 使用python爬虫爬取迅雷侠下载,呵呵,你懂得

    啥也不说了,直接上代码 #!python3 import urllib.request from lxml import etree import threading from multiproces ...

  7. java爬取p站_A站(ACFun)爬虫爬取并播放、下载视频(JAVA)

    本文使用的工具有vlc+ffmpeg+phantomjs 一般视频网站的视频地址暴露的方式有两种: 1.html直接暴露 2.通过ajax异步返回. A站使用的方式是第二种.针对第一种方式,直接使用j ...

  8. python爬取flash数据_python爬虫: 爬取flash播放页面的信息

    我们通过查看知道flash类型的网页采取文件格式是amf类型的 AMF(Action Message Format) 是Flash与服务端通信的一种常见的二进制编码模式,其传输效率高,可以在HTTP层 ...

  9. Python爬虫-爬取腾讯小视频

    这两天在爬TX的视频的原始下载地址,遇到的问题挺多,感觉这个网站的规律变化多端的,中间也忘了修改过多少次代码了,而且有时候抓包也抓不到一些想要的内容,最后也只能抓到一些像<拜托啦学妹>.& ...

最新文章

  1. Linux7 CENTOS7修改root密码
  2. NLP未来,路在何方?12位巨佬联名指路!
  3. http协商缓存VS强缓存
  4. 利用一个样本估计类别数据分布,9行代码提高少样本学习泛化能力
  5. 支持向量机的近邻理解:图像二分类为例(3)
  6. Linux下汇编语言学习笔记65 ---
  7. 回顾计算机产业发展的4个阶段:美国企业统治全球市场了吗?
  8. linux元组和列表的区别,列表,元组,集合
  9. java中userservice是什么,【图片】求助大神~~我在Reaml中注入userService对象启动tomcat就报错【java吧】_百度贴吧...
  10. 如何在Linux(Ubuntu)上安装Maven
  11. 如何使用手机端、ipad端来编写博客
  12. wp 一次简单的攻防训练
  13. 资源编译器 rc .exe 的参数
  14. java中文转英文_Java中文转换为英文拼音
  15. 《计算机世界》封面报道:互联网10年孤独[z]
  16. 微软将要求供应商提供带薪育儿假;倪光南谈中国软件业机遇,称已出现由中方主导的开源社区...
  17. Fault tolerant heap shim applied to current process. This is usually due to previous crashes
  18. 1066 Last non-zero Digit in N!
  19. 计算机网络学习--协议族、协议栈
  20. 教务系统—课程表接口信息

热门文章

  1. mysql读写分离 abp_mysql读写分离策略
  2. 浅述单目3D目标检测
  3. 格创东智亮相高端制造业CIO上海论坛,助推制造业智慧建设
  4. windows电脑使用nvm安装node,管理node版本
  5. php最大的优点,_____是PHP的最大优点
  6. 可以练计算机应用基础的网址,计算机应用基础模拟练习题
  7. 小甲鱼python第二十讲(内嵌函数和闭包)
  8. 【阿里物联平台】阿里物联平台设备接入——基于LinkSDK_v4_001
  9. 大数据-玩转数据-Maxcompute DDL
  10. 长沙有哪些点餐系统服务商?长沙点菜软件哪家好?