V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
viiii
V2EX  ›  Python

爬虫,找不到视频文件 url

  •  
  •   viiii · 2020-01-06 19:40:27 +08:00 · 5650 次点击
    这是一个创建于 1782 天前的主题,其中的信息可能已经有所发展或是发生改变。

    打算爬某网站视频内容练手(短视频),检查 html 源码发现没有任何 mp4 或 m3u8 等格式的文件 url,刷新并开始播放后,看 F12 里的 Network 也只发现加载了几个 .ts 格式文件( index0.ts/index1.ts/index2.ts ),一脸懵逼中……请问这种情况该如何下手?

    PS,播放器使用的 DPlayer,git 地址: https://github.com/MoePlayer/DPlayer

    17 条回复    2020-01-07 13:10:31 +08:00
    dosmlp
        1
    dosmlp  
       2020-01-06 19:51:58 +08:00   ❤️ 1
    也可能是通过 ws 传的数据
    Curtion
        2
    Curtion  
       2020-01-06 19:54:53 +08:00
    HLS 协议
    viiii
        3
    viiii  
    OP
       2020-01-06 21:40:40 +08:00
    @Curtion 查了下定义,感觉应该是 HLS 协议,请问这种该如何爬取视频资源?
    用 scrapy 具体怎么做?
    Tink
        4
    Tink  
       2020-01-06 21:50:04 +08:00 via iPhone
    都有 ts 文件了扒下来拼接啊
    loopinfor
        5
    loopinfor  
       2020-01-06 21:59:58 +08:00 via Android
    .ts 就是分割出来的视频片段
    ctro15547
        6
    ctro15547  
       2020-01-06 22:15:02 +08:00
    抓包 。也可以把所有的 ts 文件 download 下来 用 ffmpeg 拼一下
    cz5424
        7
    cz5424  
       2020-01-07 00:25:17 +08:00 via iPhone
    某些 M3u8 文件实际上也只是记录 ts 的地址,记事本打开可以看到
    also24
        8
    also24  
       2020-01-07 00:40:50 +08:00
    所以网站地址呢?没有网站地址凭空猜测么?
    mumbler
        9
    mumbler  
       2020-01-07 01:20:53 +08:00 via Android
    视频地址被加密了,通过一系列 JS 计算才能拿到真实视频地址,这个过程叫视频解析,普通爬虫只能爬公开数据,这种加密数据需要先解析再下载,HlS 下载完还需要拼接
    locoz
        10
    locoz  
       2020-01-07 01:50:52 +08:00 via Android
    @mumbler #9 🤔千万不要把“公开数据”这个词乱用啊…容易引起混淆的…只要没有权限要求、表面上是个普通用户打开了不需要做啥身份校验操作就能看的就可以叫“公开数据”了。
    locoz
        11
    locoz  
       2020-01-07 01:58:26 +08:00 via Android
    你可以换个思路:先抓个包看看,一般来说,页面加载完毕且视频还在加载的时候,仍然有在进行通信的就大概率会跟这个视频有关系了。
    因为正常来说不可能还有除了视频以外的其他大型资源需要加载了,而如果有大量用户操作日志之类的东西混淆视听的话又很容易分辨,可以直接过滤掉。
    在简单筛选一下之后就可以找出来了。找到之后如果请求中有加密参数的话就翻 js 吧…
    l4ever
        12
    l4ever  
       2020-01-07 08:34:25 +08:00
    1.看看有没有 m3u8. 现在流行 ts 文件加密, 都是用 AES-128-CFB 的. m3u8 里面有 Key 偏移值. 看看里面到底配置了加密没有. 通常 key 是另外一个 http 请求去获取的.仔细分析一下.

    2.根据 m3u8 提供的 ts 文件地址下载 ts 文件.

    3.如果加密了, 还要解密 ts

    4.合并 ts
    imaning
        13
    imaning  
       2020-01-07 08:43:39 +08:00
    @l4ever key 是对视频内容加密用的,不是加密 url 的。他既然能请求到 ts 地址,肯定就有 m3u8 地址,只是可能他没注意到而已。关键是要找到 m3u8 地址才行。
    l4ever
        14
    l4ever  
       2020-01-07 09:04:22 +08:00
    @imaning 我说的就是对 ts 加密啊?难道我的表达能力有问题?你是没看懂?
    annielong
        15
    annielong  
       2020-01-07 09:35:49 +08:00
    有 index0.ts 肯定有 m3u8,一般没仔细看,最多是没有明确 m3u8,但是有 api 获取了 m3u8 的内容,检查所有 post
    pandait
        16
    pandait  
       2020-01-07 12:56:26 +08:00
    用 ts 还原就好了啊。
    chenliangngng
        17
    chenliangngng  
       2020-01-07 13:10:31 +08:00 via Android
    马克,现在各视频站技术水平比以前高好多,应该就是这两年才改的,为什么呢?/摊手
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2507 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 01:32 · PVG 09:32 · LAX 17:32 · JFK 20:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.