本文使用的工具有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. 使用Python+OpenCV预测年龄与性别
  2. 用BadgeView在actionbar menu上显示提醒信息
  3. xml配置文件的形式 VS 配置类的形式
  4. Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇
  5. 简述单片微型计算机屏蔽的作用,单片机原理及应用试题库 - 答案
  6. Word2013中制作按钮控件
  7. 写一个c语言的链表记录一下
  8. 每天生成 45 亿字符的 GPT-3,真能取代人工?
  9. JavaScript-常用正则函数(适合忘记时看)
  10. beeline安装_Hive 系列 之 简介与安装
  11. 机器学习 python 库_Python机器学习库
  12. java day15 【Map】
  13. Layer 提示框tips使用(批量提示)
  14. linux开发arm音量加减代码,arm-linux学习:最简驱动模块(示例代码)
  15. 汽车金融信用评分卡模型-论文_毕业设计_企业项目复现
  16. 分类--ROC 和曲线下面积
  17. 45度回合RPG网页游戏《烽烟OL》v1.3正式开源!
  18. Flink(三十七)—— Flink 清理过期 Checkpoint 目录的正确姿势
  19. Check Point设置允许外网通过指定端口访问服务器
  20. 【周末送新书】基于BERT模型的自然语言处理实战

热门文章

  1. 使用Github Actions自动部署vue项目到nginx服务器
  2. 同志们,免费版的Ant Design Pro Vue3 来啦
  3. 小甲鱼python第二十讲(内嵌函数和闭包)
  4. OSChina 周三乱弹 —— 有舍才有得
  5. 日常微博营销技巧究竟有哪些呢?
  6. Doris的安装部署
  7. 强行重置Mac OS X管理员密码
  8. 通过js实现图片左右点击图片左右切换效果
  9. cocos2dx内存优化
  10. 下载MySQL历史版本