抓腾讯视频真实地址总结

抓腾讯视频裸源总结
腾讯视频必然是国内最全面,最复杂的视频网站之一了,因此研究他的网页结构很有代表性.

首先,腾讯理所当然不会把视频资源暴露在网页源代码里,所以F12查看他的元素以获得重要信息你会无功而返.
所以,凄凉地研究一段时间后断然放弃...

有一个流传已久的经验, 大概是: 攻克一个网页,最好从移动端入手,至于为什么,
大概因为移动端源代码要稍简单一点, 或者说一些加密算法还不成熟.
所以,get一个小技能, 以为只有我知道, 搜寻了半天居然发现是多数浏览器都支持了n久的...
只是以前是设置参数,现在的浏览器都很智能,一键就可以模拟手机,并且可以选型号

进入正文:
模拟手机浏览器进入视频首页, 任意选择一个视频进入, F12后重新刷新一遍
腾讯不出意料地采取异步加载技术,所以,等n多让人大开眼界的广告加载完毕后,你会看到正片袭来
为了防止不断地动态加载造成打扰,可以等正片加载完毕后停止抓包录制
安心的分析每条代码吧, 有的是图片,有的是css, 特别要留意的是js

要相信在众多的元素里面, 终究可以找到视频播放地址
http://124.14.20.19/vlive.qqvideo.tc.qq.com/z0024zqdzu1.p212.1.mp4?sdtfrom=v1010&
guid=21b1d1487c0e3886a2958dc5f2503b9a&vkey=9644BCB6D0138F9831260BE00AA16EE17DEAAA416155124AA999873279C305
574FB8F0311CA565E95D5CB127925E29683E8813DB6373B64D37F5EBD59EF971B6F32CBE001F0B39B585827D9AC07484FDFD3B1255A95A
550DB69002BF46B20594E6BF36DC67A4F3302ADABA6120CD137D3DA2A049DFD5DDC8&platform=2

有一些参数是不必要的,可以考虑去掉,这里采用尝试的方法,因为的确不懂这些简称什么意思,阅读起来太残忍了
简化后视频地址
http://124.14.20.19/vlive.qqvideo.tc.qq.com/z0024zqdzu1.p212.1.mp4?
vkey=9644BCB6D0138F9831260BE00AA16EE17DEAAA416155124AA999873279C305574FB8F0311CA565E95D5CB127925E29683E8813D
B6373B64D37F5EBD59EF971B6F32CBE001F0B39B585827D9AC07484FDFD3B1255A95A550DB69002BF46B20594E6BF3
6DC67A4F3302ADABA6120CD137D3DA2A049DFD5DDC8

以上可以看到,视频主要参数由 协议http:// + 类似ip + host + vid一样的东西(z0024zqdzu1) + 长串的vkey 组成
需要费心的是vid 和vkey , 主要是vkey,因为其他都能从源代码轻松找到或者拼接

所以找vkey是重点, 不用说,vkey肯定是播放视频的某个关键"钥匙"

需要的vkey在哪里?怎样构造这个奇怪的url?

经过总结发现,构造目标地址方法有三种,
1: 根据规律构造.如页数,每页的个数,其实数
2: 来自某一个文件的一个组成元素, 在第一个文件里找到第二个文件需要的元素,常见于id,cid,vid 等
3: 手动生成, 常见的有时间戳:time.time()
在这个案例中, 方法二比较靠谱.所以,这个vkey就在其他文件中寻寻觅觅吧!

终于,在一个叫getinfo里面发现了可疑文件,他的返回是一长串貌似我们认识的东西

getinfo的完整请求地址
https://vv.video.qq.com/getinfo?callback=txplayerJsonpCallBack_getinfo_552345&&charge=0&vid=z0024zqdzu1&defaultfmt=auto
&otype=json&guid=21b1d1487c0e3886a2958dc5f2503b9a&platform=10201&defnpayver=0&appVer=3.2.26&sdtfrom=v1010&host=v.qq.com
&ehost=https%3A%2F%2Fv.qq.com%2F&sphttps=1&_rnd=1499231532&spwm=2&defn=&fhdswitch=0&show1080p=0&isHLS=0
&newplatform=10201&defsrc=1&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D&_1499231532114=

返回的是一个类json文件,去掉头就是完全的json, 用json解析工具得到如下:
{
    "dltype": 1,
    "exem": 0,
    "fl": {
        "cnt": 3,
        "fi": [
            {
                "id": 10203,
                "name": "sd",
                "lmt": 0,
                "sb": 1,
                "cname": "标清;(270P)",
                "br": 64,
                "drm": 0,
                "video": 1,
                "fs": 4972275,
                "sl": 0
            },
            {
                "id": 10212,
                "name": "hd",
                "lmt": 0,
                "sb": 1,
                "cname": "高清;(480P)",
                "br": 235,
                "drm": 0,
                "video": 1,
                "fs": 16526691,
                "sl": 1
            },
            {
                "id": 10201,
                "name": "shd",
                "lmt": 0,
                "sb": 1,
                "cname": "超清;(720P)",
                "br": 650,
                "drm": 0,
                "video": 1,
                "fs": 31367763,
                "sl": 0
            }
        ]
    },
    "fp2p": 0,
    "hs": 0,
    "ip": "211.161.248.25",
    "ls": 0,
    "preview": 139,
    "s": "o",
    "sfl": {
        "cnt": 0
    },
    "tm": 1499248445,
    "vl": {
        "cnt": 1,
        "vi": [
            {
                "br": 115,
                "ch": 0,
                "cl": {
                    "fc": 1,
                    "ci": [
                        {
                            "idx": 1,
                            "cs": 16526691,
                            "cd": "139.690",
                            "cmd5": "2fa46e4979bef73aeee198b119bcddb5",
                            "keyid": "z0024zqdzu1.10212.1"
                        }
                    ]
                },
                "ct": 21600,
                "drm": 0,
                "dsb": 0,
                "fclip": 1,
                "fmd5": "2fa46e4979bef73aeee198b119bcddb5",
                "fn": "z0024zqdzu1.p212.mp4",
                "fs": 16526691,
                "fst": 5,
                "fvkey": "771B9BCC38551D087A458F669156E0C8C3E83BE0A8EB9A62C9065A87D1C0A913F43A40BA502ED5BD575A6F66FE66A93E07E2BEAAA48D6997EB610B96AD2436F4AA64134E59CDB1205BF931F801785AA288EFE31242619D391F3F169950BAF5AA0901DA9E8E3B7D81A811FD5348EE8A3FE6046D8C8BE5400A",
                "head": 0,
                "hevc": 0,
                "iflag": 0,
                "level": 0,
                "lnk": "z0024zqdzu1",
                "logo": 1,
                "mst": 8,
                "pl": [
                    {
                        "cnt": 3,
                        "pd": [
                            {
                                "cd": 2,
                                "h": 45,
                                "w": 80,
                                "r": 10,
                                "c": 10,
                                "fmt": 40001,
                                "fn": "q1",
                                "url": "https://puui.qpic.cn/video_caps/0/"
                            },
                            {
                                "cd": 2,
                                "h": 90,
                                "w": 160,
                                "r": 5,
                                "c": 5,
                                "fmt": 40002,
                                "fn": "q2",
                                "url": "https://puui.qpic.cn/video_caps/0/"
                            },
                            {
                                "cd": 2,
                                "h": 135,
                                "w": 240,
                                "r": 5,
                                "c": 5,
                                "fmt": 40003,
                                "fn": "q3",
                                "url": "https://puui.qpic.cn/video_caps/0/"
                            }
                        ]
                    }
                ],
                "share": 1,
                "sp": 0,
                "st": 2,
                "tail": 0,
                "td": "139.69",
                "ti": "《双世宠妃》邢昭林梁洁组坦诚夫妇上演独宠蜜爱",
                "type": 1036,
                "ul": {
                    "ui": [
                        {
                            "url": "http://124.14.20.19/vlive.qqvideo.tc.qq.com/",
                            "vt": 203,
                            "dtc": 0,
                            "dt": 2
                        },
                        {
                            "url": "http://124.14.20.21/vlive.qqvideo.tc.qq.com/",
                            "vt": 203,
                            "dtc": 0,
                            "dt": 2
                        },
                        {
                            "url": "http://124.14.20.20/vlive.qqvideo.tc.qq.com/",
                            "vt": 203,
                            "dtc": 0,
                            "dt": 2
                        },
                        {
                            "url": "http://video.dispatch.tc.qq.com/35137871/",
                            "vt": 0,
                            "dtc": 0,
                            "dt": 2
                        }
                    ]
                },
                "vh": 480,
                "vid": "z0024zqdzu1",
                "videotype": 2,
                "vr": 0,
                "vst": 2,
                "vw": 848,
                "wh": 1.7666667,
                "wl": {
                    "wi": [

                    ]
                }
            }
        ]
    }
# }
什么标清,高清之类,所幸可以看懂一些了.
而,我们还看到了fvkey, fvkey和vkey一定有着某些不可告人的关系!
并且, 在vl的vi里面的ul里的ui里面有url地址,这url有类ip的东西,所以因电脑而异,需要取出来作为播放页的base_url
所以,getinfo要坚决构造出来,并且得到fvkey, url, 不罢休
那么问题来了,getinfo的url实在超级长,大概有三十多个参数,哪些是需要的呢?

经过苦逼地百次尝试,得出以下结论:

&_1499231532114= 时间戳, 可以去掉,不影响
&_qv_rmt2=o6Qa4YDm149352oVg%3D 比较重点,这是腾讯最近的新技术,对网络起疯狂限速作用,去掉后视频延迟3-5秒出画面,虽加载成功,但是出现明显卡顿
&_qv_rmt=jBZ5pIl8A19213wFt%3D 同上
&defsrc=1 可以去掉,不影响
&newplatform=10201 可以去掉,不影响
&isHLS=0 可以去掉
&show1080p=0 1080p按钮,可以去掉
&fhdswitch=0 全高清切换按钮,可以去掉
&defn= 有人说是清晰度,defn是definition的简写;sd、hd、shd、fhd分别是standard definition、high definition、super high definition、full high difinition的简写。然而,可以去掉
&spwm=2 可以去掉
&_rnd=1499231532 可以去掉
&sphttps=1可以去掉
&ehost=https%3A%2F%2Fv.qq.com%2F 可以去掉
&host=v.qq.com 可以去掉
&sdtfrom=v1010 不能去掉, 延迟加载,播放失败
&appVer=3.2.26 app版本信息,作为后缀便于发送统计的,可以去掉
&defnpayver=0 可以去掉
&platform=10201 平台信息,不能去掉,会导致404
&guid=21b1d1487c0e3886a2958dc5f2503b9a 全球唯一标识符,不建议去掉,画面20s左右开始卡顿
&otype=json 脚本类型,建议保留,便于作json解析,去掉后会展示成xml类型数据
&defaultfmt=auto 像是某个默认按钮,默认为自动,去掉后没有影响, 可以去掉
&vid=z0024zqdzu1 视频唯一标识,显然不能去
&charge=0 应该是付费相关,可以去掉
callback=txplayerJsonpCallBack_getinfo_552345 有待观察,暂时去掉没影响
剩余的base_url: https://vv.video.qq.com/getinfo?

以上是经过了反复对比尝试,挨个增删验证的, 其实有多次爬取经验就会得知一些为0的参数或者默认的参数是可以主动删掉的
本次逐一进行了增删尝试,主要是担心某些参数尽管去掉后不影响最终加载出来,但是可能会导致延迟或者卡顿,这非常影响用户体验

经过梳理,最终获得流畅视频的fvkey和url需要: base_url + vid + otype + guid + platform + sdtfrom + _qv_rmt

重新组装一遍精简的url:
https://vv.video.qq.com/getinfo?vid=z0024zqdzu1&otype=json&guid=21b1d1487c0e3886a2958dc5f2503b9a&platform=10201&sdtfrom=v1010&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D

那么,这些参数从哪里来?解析一下:

https://vv.video.qq.com/getinfo?可以作为默认base_url
vid可以从视频页面或者源代码中提取
otype为固定的json格式
guid 暂时发现一台机子是固定的,也是限速,可能未必,是微软在作怪
platform固定的
sdtfrom固定的
_qv_rmt 限速技术,难搞, 到处找不到,每次都不一样,先用固定一个试试, 这是该爬虫成败的关键,因为我们认为,抓到一个虽然可以播放但是有瑕疵的视频,即是失败

最后组成了一个可以获取fvkey并且能够比较轻松组装的url, {}便于代码用format方法
https://vv.video.qq.com/getinfo?vid={vid}&otype={otype}&guid={guid}&platform={platform}&sdtfrom={sdtfrom}&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D

所以,小黑板画重点了:
首先从播放页得到视频vid,代码省去这一环节,因为vid很好找
组成getinfo页面,得到fvkey
组成视频真实地址

好吧,实际上也不是什么重点, 因为每个抓取视频网站的爬虫都会经历这些阶段,那么不同在哪里呢?
1:观看了不少爬视频的帖子发现人们常说的getkey(即获取fveky的脚本)在现在的腾讯视频版本没有了,再次证明反爬技术日新月异,爬虫不进步很难生存了
2:腾讯视频极有可能在今年上线了新的限制技术, 即前面所说的_qv_rmt, 这个参数由特殊算法生成,每次请求都不一样,每台机子也不一样
猜测可能用了guid和时间戳等数据用一种算法合成,而且成对出现,去掉它的结果就是导致视频加载速度瞬间变成20k左右每秒,几乎一秒一卡,无法观看
如果不去掉它,如何生成呢?
不幸找遍了所有文件,没有找到答案, 所以暂时一成不变了,但是这肯定不是最终解决方案.
所以,有了勉强的源码示例, 但是用一成不变的_qv_rmt值一定时间内没有出问题, 这是一个谜

# 勉强源码示例
import requests
import re
import json
# vid就直接查找得到,正则影响效率太多
vid = input(‘请输入视频vid:‘)
# vid = ‘n1656e0z8xj‘

# 默认的参数
json_type=‘json‘
platform = ‘11001‘
guid=‘21b1d1487c0e3886a2958dc5f2503b9a‘
sdtfrom = ‘v1010‘
# getinfo的base_url
base_info_url = ‘https://vv.video.qq.com/getinfo?vid={vid}&otype={otype}&guid={guid}&platform={platform}&sdtfrom={sdtfrom}&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D‘
# 真实地址的base_url
base_real_url = ‘{self_host}/{vid}.mp4?vkey={fvkey}‘
# format方法生成getinfo
info_url = base_info_url.format(vid=vid, otype=json_type, guid=guid, platform=platform, sdtfrom=sdtfrom)

response = requests.get(info_url)
html = response.text
# 正则表达式提取json数据并序列化为json格式
data = re.search(‘=(.*);‘,html).group(1)
data = json.loads(data)
for each in data.get(‘vl‘).get(‘vi‘):
    fvkey = each.get(‘fvkey‘)
    self_host = each.get(‘ul‘).get(‘ui‘)[0].get(‘url‘)

# 组装视频真实地址
real_url = base_real_url.format(self_host=self_host, vid=vid, fvkey=fvkey)
print(‘视频真实地址为:‘,real_url)

最后,所有的爬虫技术都是针对当前页面的结构进行的,对于一些变化速率很高的网站,比如腾讯视频,抓到的地址很容易失效
这是因为生成key的算法十分复杂, 猜想有guid,时间戳,_qv_rmt等每时每刻都在变化的数据参与计算,目标只有一个:一般人休想永久的搞到地址
这是许多工程师昼夜在研究算法和加密技术的原因.
同时,针对页面的分析,还仅局限于‘所见即所得‘的状态,爬虫不会无中生有,虽然抓到的地址是裸源无广告,但是很依赖网页的动态加载技术和登陆限制,
也就是说,vip的视频比如只试看5分钟,在不登录前提下,源码中只放出了5分钟,剩余的部分无从找到,
所以对于另一种黑科技的研究--‘破解vip‘,仅从爬虫技术来看,还来日方长.
时间: 2024-12-26 20:46:08

抓腾讯视频真实地址总结的相关文章

解析腾讯视频真实地址

解析腾讯视频真实地址 标签(空格分隔): php 分析 1 我们从腾讯视频上找到的网页链接格式是这样的 https://v.qq.com/x/page/b0136et5ztz.html vid = b0136et5ztz 2 把vid放单到接口上 http://vv.video.qq.com/getinfo?vids=b0136et5ztz&platform=101001&charge=0&otype=json 3 php发送curl请求 QZOutputJson={"d

解析视频真实地址播放 By HL

手思3.0启动,从手思1.0版的iOS2个人,到现在的N个人,如今又回来做手思了. 重新做自然就要比之前的更好,更强大,而视频播放页的效果相当的不乐观. 公司用的是优酷的视频连接,只能用webview加载播放,用播放器是无法直接播放的,需要找到它真实的m3u8地址才能播放,找了大半天都找不到解析视频真实的url方法,基本都是过时的,无效的. 偶然发现这段代码,真是太棒了!!! M3u8地址解析 - (NSString *)parseM3u8From:(UIWebView *)webView{ N

优酷的视频真实地址(下载地址)

首先,我们需要这款名叫“点量视频解析嗅探组件”的软件,主要用于解析各大视频网站在线观看视频的真实地址,获得视频的源址. 目前,该软件可解析的视频网站包括: 乐视网.新浪视频.搜狐视频.风行网.PPTV.华数.PPS.CCTV中国网络电视.56网.酷6网.激动网.六间房.凤凰视频.网易视频.优米网.M1905电影网,以及youtube等等众多视频网站 今天,我们进以优酷网为例吧~ 假如你在优酷网上看到一个视频,在线播放的网址为:http://v.youku.com/v_show/id_XMjUxN

搜狐视频真实地址手动获取方法

1.打开搜狐视频地址: 比如 http://tv.sohu.com/20160713/n459068644.shtml 2.按F12,打开控制台 3.切换视频分辨率(以下以超清为例子,分辨率看width的数字一般1280为高清) 4.寻找Network下面的vrs_flash.action?vid 5.双击打开网页 链接类似于:http://hot.vrs.sohu.com/vrs_flash.action?vid= 6. 按Ctrl+F,搜索.mp4 7.找出非sample的视频, ["/47

微信小程序如何播放腾讯视频?

1.背景 因为当时需要做视频播放,后台存放视频文件又不现实.所以,做了一个能解析腾讯视频地址的并播放视频的小程序. 2.介绍 小程序里的解析腾讯视频地址的代码是参考了一个开源项目you-get写的,把里面的腾讯视频下载的python代码写成了JS代码. 3.腾讯视频ID从哪获取 1.一般播放一个腾讯视频的时候播放地址为https://v.qq.com/x/page/w0647n5294g.html..html到最后一个/之间的字符串即为腾讯视频id.如https://v.qq.com/x/pag

【Python3 爬虫】16_抓取腾讯视频评论内容

上一节我们已经知道如何使用Fiddler进行抓包分析,那么接下来我们开始完成一个简单的小例子 抓取腾讯视频的评论内容 首先我们打开腾讯视频的官网https://v.qq.com/ 我们打开[电视剧]这一栏,找到一部比较精彩的电视剧爬取一下,例如:我们就爬取[下一站,别离]这部吧 我们找到这部电视剧的评论如下图: 我们看到上图标记部分[查看更多评论] 我们首先在Fiddelr中使用命令clear清除之前浏览的记录 输入命令直接回车即可 接着我们点击[查看更多评论],此时再次看Fiddler,我们可

Python爬虫实现抓取腾讯视频所有电影【实战必学】

2019-06-27 23:51:51 阅读数 407  收藏 更多 分类专栏: python爬虫 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者: Python新手学习之家 用python实现的抓取腾讯视频所有电影的爬虫 # -*- coding: utf-8 -*-   import re   import urllib2   from bs4 import BeautifulSoup   import stri

php 获取优酷视频的真实地址(2014.6月新算法)

上个礼拜发现优酷改版了,各种过滤优酷广告的插件都失效了,于是我百度了一下(谷歌也不能用了)发现优酷改算法了,在ckplayer论坛发现有人在6月25号发了个php 的优酷代理文件,下载下来发现,能用但只能获取mp4格式的视频地址,而且php还加密了,没办法查看源码,后来通过微盾解密发现其中的源码,结合以前自己写的一个优酷视频解析类.... 感谢    3shi大大 具体分析请见 3shi大大的文章  优酷视频真实地址解析  (当然现在不能用了,主要看分析) ps.  新算法是从别人那里解密出来的

用python实现的抓取腾讯视频所有电影的爬虫

1. [代码]用python实现的抓取腾讯视频所有电影的爬虫    # -*- coding: utf-8 -*-# by awakenjoys. my site: www.dianying.atimport reimport urllib2from bs4 import BeautifulSoupimport string, timeimport pymongo NUM     = 0         #全局变量,电影数量m_type  = u''       #全局变量,电影类型m_site