目录

一 破解优酷VIP视频

import requests
import re
import json HEADERS = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
} '''
破解优酷VIP视频
'''
class web():
def __init__(self):
self.api = "http://y.mt2t.com/lines?url=" # 在线解析视频平台
self.url = "https://v.youku.com/v_show/id_XNDEwNTMzMzM2OA==.html" # 需要解析的VIP视频网站
self.name = None
self.post_url1 = "http://y.mt2t.com/lines/getdata" # 解析平台上获取的1号端口,用于收集video的地址
self.post_url2 = 'http://y2.mt2t.com:91/ifr/api' # 解析平台上获取的m3u8视频段提供端口 # 发送解析请求通过re正则获取key的值
def find_key(self): # 通过访问解析平台api与需要解析的VIP视频网站
res = requests.get(self.api + self.url)
# 获取文本
html = res.text key = re.search(r'key:"(.*?)"', html).group(1) # 通过解析平台找到ajax请求中的data中的key
# print(key)
return key # 对原来的url进行修改,得出完整的url
def url_spilt(self, url): # 将拿到的viedo视频段进行转码,再做切分获得类型和所需的data体中的视频地址 ''' <script type="text/javascript">
var url="usZehnz38ibymr+ghLS1yGrU7tBqDcTQETbMfdhmceJxo2Y1QIbrmjQElPgxaXjmVIzB0qqL9GoUYCXdSd8GYA==";
var type="m3u8";
var api="/ifr/api";
var device="";
player(api,url,type,device,0);
</script> # 访问这个链接,内部会有上述ajax请求获取视频
usZehnz38ibymr+ghLS1yGrU7tBqDcTQETbMfdhmceJxo2Y1QIbrmjQElPgxaXjmVIzB0qqL9GoUYCXdSd8GYA==
http://y2.mt2t.com:91/ifr?url=usZehnz38ibymr%2bghLS1yGrU7tBqDcTQETbMfdhmceJxo2Y1QIbrmjQElPgxaXjmVIzB0qqL9GoUYCXdSd8GYA%3d%3d&type=m3u8'
'''
# 对列表中的第一个url里面的字符进行特换
# 有些视频的链接是有 %2f 需要替换成 /
url_param = url.split("?url=")[1].split("&")[0].replace("%2b", "+").replace("%3d", "=").replace("%2f", "/") # 获取 m3u8
movie_type = url.split("type=")[1]
return url_param, movie_type # 采集视频
def get_playlist(self):
'''# 飞驰人生:
<script type="text/javascript">
$(document).ready(
function () {
$.ajax({
type: "post",
dataType: "json",
url: "/lines/getdata", # 1.需要获取的url http://y.mt2t.com/lines/getdata # 2.获取key值
data:{url:"http://v.youku.com/v_show/id_XNDEwNTMzMzM2OA==.html",type:"",key:"a0b923820dcc509a"},
success:ShowMenu
});}
);
</script>
''' # 调用find_key方法获取vip视频中data的key
key = self.find_key() data = {
"url": self.url,
"key": key,
}
# 获取VIP所需的KEY之后向1号端口发送data包来获取所需的viedo视频段
html = requests.post(self.post_url1, data=data).text
dic = json.loads(html)
print(dic)
''' # 往解析平台发送post请求获取的是一个json数据,里面有整部电影分切成的几个视频链接 # 第一个链接就是全部的视频了!!! 凡是m3u8后缀的链接都隐藏着视频
[{'Url': 'http://y2.mt2t.com:91/ifr?url=usZehnz38ibymr%2bghLS1yGrU7tBqDcTQETbMfdhmceJxo2Y1QIbrmjQElPgxaXjmVIzB0qqL9GoUYCXdSd8GYA%3d%3d&type=m3u8',
'Video_type': '1',
'Vid': None,
'Scheme': 'auto'}, {'Url': 'http://y2.mt2t.com:91/ifr?url=usZehnz38ibymr%2bghLS1yBx%2fLeW6zBPvlnirzwVAPb22uUqY7Lurs2njqvy41H%2fP56dP%2bJxZNyUrXMTBI9wDCg%3d%3d',
'Video_type': '1',
'Vid': None, 'Scheme': 'auto'},
{'Url': 'http://y2.mt2t.com:91/ifr?url=a6tgiq6l1aQQZzObpXfOZ8U46WROtjYnUG5ZzktCdBFLPGVOTRFWXddcBGY61OgLBMh9uvHbmq7StHt5J1YqsQ%3d%3d',
'Video_type': '1',
'Vid': None,
'Scheme': 'auto'}, {'Url': 'http://y2.mt2t.com:91/ifr?url=KuT7Bg63M9X8euMJDPneBFvHMMyUaXi9G3Pu5CiJRWLODtsR9maZGFrrtetCrKTE',
'Video_type': '1',
'Vid': None,
'Scheme': 'auto'}, {'Url': 'http://y2.mt2t.com:91/ifr?url=HAoUzVAntrQdCkvIryzh%2bCLfbHCa6F1N%2fdmTpLCjBpzarEGkP6zvW36iGCLJ1Qt9',
'Video_type': '1',
'Vid': None,
'Scheme': 'auto'}, {'Url': 'http://y2.mt2t.com:91/ifr?url=4v6ceQdhfTwrhJ5xfngkjQST%2fCa1dsHxOZXRmFQSiLRQIv6FZ58v%2fW1%2b53Zkfz0uy30gLudsy1Cd9GAYjVudWp5x4z8EBN7C1NDeLNGpUmE%3d',
'Video_type': '1',
'Vid': None,
'Scheme': 'auto'}, {'Url': 'http://y2.mt2t.com:91/ifr?url=4v6ceQdhfTwrhJ5xfngkjQST%2fCa1dsHxOZXRmFQSiLRQIv6FZ58v%2fW1%2b53Zkfz0utK4DajZZFp2swCbcqN1J3w%3d%3d',
'Video_type': '1',
'Vid': None,
'Scheme': 'auto'}]
'''
# 把列表中的第一个视频链接去做处理,获取完整的url
url_param, type = self.url_spilt(dic[0]["Url"]) '''
<script type="text/javascript">
var url="usZehnz38ibymr+ghLS1yGrU7tBqDcTQETbMfdhmceJxo2Y1QIbrmjQElPgxaXjmVIzB0qqL9GoUYCXdSd8GYA==";
var type="m3u8";
var api="/ifr/api";
var device="";
player(api,url,type,device,0);
</script>
'''
# 往此地址发送ajax请求获取视频数据
res = requests.post(self.post_url2,
data={
"url": url_param,
"type": '',
"from": "mt2t.com",
"device": "",
"up": 0
}) # 返回json视频数据
play = json.loads(res.text)
self.save_movie(play) def save_movie(self, play):
with open('%s.mp4' % self.name, 'wb') as f:
f.write(play) # if __name__ == '__main__':
# vip = web()
# vip.get_playlist() ''' 批量获取电影所有的名称与链接. 电影详情接口:
https://list.youku.com/category/page?c=96&pt=2&type=show&p=1
https://list.youku.com/category/page?c=96&pt=2&type=show&p=2
https://list.youku.com/category/page?c=96&pt=2&type=show&p=3
https://list.youku.com/category/page?c=96&pt=2&type=show&p=4
https://list.youku.com/category/page?c=96&pt=2&type=show&p=5 每个接口的所有详情信息: {'success': True,
'message': '',
'data': # 数据
[{'summaryType': 'UPDATE_STATUS',
'access': 'allow',
'type': 'vertical',
'img': '//r1.ykimg.com/051640005C8B7F56859B5D5D300E06C1',
'summary': '正片',
'title': '篮球冠军', # 电影名称
'subTitle': '傲慢教练与怪异球队',
'videoId': 'XNDE4MzY4NjUzNg==',
'videoLink': '//v.youku.com/v_show/id_XNDE4MzY4NjUzNg==.html'} # 电影详情链接
...
] vip电影链接div:
<div id="dramaFixedWrap" class="drama-fixed-wrap">
<div class="item item-cover item-cover-fixed active" item-id="item_XNDE4MzY4NjUzNg==" title="篮球冠军">
<a href="//v.youku.com/v_show/id_XNDE4MzY4NjUzNg==.html?&amp;s=eccc9254a71842e09356"> # 需要解析的链接
<a href="(.*?)"> <div class="cover"><img src="https://vthumb.ykimg.com/054102015CDD1E950000017A690856DF"></div>
<div class="title">篮球冠军</div>
</a>
</div>
<i class="scroll-fixed"></i>
</div> ''' import requests # 获取全部电影主页的json数据
def parse_index(url):
res = requests.get(url)
data = res.json()
return data.get('data') # 保留 电影名称 与 电影链接 放进生成器内
def get_vip_movie(datas):
# print(data)
for data in datas:
# print(data)
# 电影名称
title = data.get('title')
# 拼接完整的电影链接
video_link = 'https:' + data.get('videoLink')
yield title, video_link # url = 'https://list.youku.com/category/show/c_96_pt_2.html?spm=a2ha1.12701310.app.5~5!2~5~5~5~DL!6~DD~A!3' if __name__ == '__main__':
base_url = 'https://list.youku.com/category/page?c=96&pt=2&type=show&p={}'
vip = web()
for line in range(1, 11):
url = base_url.format(line)
# 解析电影的每一个接口,获取所有电影接口的json数据
data = parse_index(url)
# 接收到N个电影名字与电影链接的生成器
vip_movies = get_vip_movie(data)
# print(vip_movies)
for movies in vip_movies: # 电影名称与电影url
name, link = movies vip.name = name
vip.url = link vip.get_playlist() print(name, link) # parse_link(name, link)

OOP

import requests
import re
import json def parse_url(list1):
for line in list1:
line = line + '.ts'
res = requests.get(line)
print(res.text)
yield line api = "http://y.mt2t.com/lines?url=" # 在线解析视频平台
# # 正义联盟
url = "https://v.youku.com/v_show/id_XNDA0MjYzNzgyMA==.html?spm=a2h03.12024492.drawer7.dzj1_4&scm=20140719.rcmd.1698.show_cc129064962411de83b1" # 需要解析的VIP视频网站 # 比悲伤更悲伤的故事
# url = "https://v.youku.com/v_show/id_XNDE3NjQ2MTQ0OA==.html?spm=a2h0j.11185381.listitem_page1.5~A&&s=0bfa8c056436451c9d47" # 需要解析的VIP视频网站
api_url_2 = 'http://y2.mt2t.com:91/ifr/api' # 解析平台上获取的m3u8视频段提供端口 api_url = api + url
api_res = requests.get(api_url) # 往解析平台发送请求获取的响应文本中我们发现里面包含了一个ajax请求
# print(api_res.text)
'''
<script type="text/javascript">
$(document).ready(
function () {
$.ajax({
type: "post",
dataType: "json",
url: "/lines/getdata",
data:{url:"http://v.youku.com/v_show/id_XNDA0MjYzNzgyMA==.html",type:"",key:"a0b923820dcc509a"},
success:ShowMenu
});}
);
</script> 接下来我们获取这地址的相关数据,然后模拟这个ajax请求
''' # 通过解析平台找到ajax请求中POST请求url、data中的url、data中的key
post_url, movie_url, key = re.findall(r'url: "(.*?)".*?data:{url:"(.*?)".*?key:"(.*?)"', api_res.text, re.S)[0] # 拼接解析平台上获取的1号端口,用于收集video的地址
post_url = "http://y.mt2t.com" + post_url
# print(post_url) # print(post_url, movie_url, key) data = {
'url': movie_url,
'key': key
} # 发送post请求返回的是一个响应文本
response = requests.post(post_url, data=data) # print(response.text)
# 需要对文本进行一个反序列化成json格式的数据
json_data = json.loads(response.text) # 发现发送完ajax请求以后还得发送第二次
'''
请求url:
http://y2.mt2t.com:91/ifr/api 请求方式:
POST 请求体:
需要对请求参数进行格式化 h9MjvCpkvRUdjqRNwPyEzm6lVb74WEQWtduwJ3qhTv9moH9hcwtf61EG67N17Wyjh85y8GwYRlvozCiftcdTQg%3d%3d&type=m3u8
url: h9MjvCpkvRUdjqRNwPyEzm6lVb74WEQWtduwJ3qhTv9moH9hcwtf61EG67N17Wyjh85y8GwYRlvozCiftcdTQg==
type: m3u8
from: mt2t.com
device:
up: 0
''' for line in json_data:
# print(line['Url'])
url = line['Url'] # 需要对请求参数进行格式化
url_param = url.split("?url=")[1].split("&")[0].replace("%2b", "+").replace("%3d", "=").replace("%2f", "/")
print(url_param) data = {
'url': url_param,
'type': '',
'from': 'mt2t.com',
'device': '',
'up': 0
} res = requests.post(api_url_2, data=data)
# print(res.text)
# json_data2 = json.loads(res.text)
json_data2 = res.json()
print(json_data2)
if json_data2:
if json_data2['url'].endswith('.mp4'):
movie_url = json_data2['url']
print(movie_url)

function

 
 

破解优酷VIP视频的更多相关文章

  1. 优酷m3u8视频源地址获取失败

    昨天和今天上午,优酷站点视频全然没有办法播放,可是我是获取的优酷视频的视频原地址,所以app还是能够正常播放而且有下载功能.今天下午開始,优酷视频网页能够訪问了,可是视频原地址却不在了.我全部的app ...

  2. dede后台添加优酷等视频iframe链接时被替换成了图片

     添加文章时 添加优酷视频 :<iframe height=498 width=510 src='http://player.youku.com/embed/XNDAzNTAzODE4OA==' ...

  3. .net下载优酷1080P视频

    事实上流程大致是:调用飞驴下载API+js解析+文件下载+调用flvBind合并这样一个流程而已_(:з」∠)_ 貌似是不用太多的说明..嗯.. 起先的需求是从优酷上下载一些视频 只是网络上的各种软件 ...

  4. 跳过爱奇艺优酷vip

      1.google chrome浏览器  2.下载插件安装 Tampermonkey  https://pan.baidu.com/s/1qvRQD2UO6gPHogjtSUBwUw       将 ...

  5. 爬虫(三)解析js,抓取优酷免费视频的真实播放地址

    工具:google浏览器 + fiddler抓包工具 说明:这里不贴代码,[只讲思路!!!] 原始url = https://v.youku.com/v_show/id_XMzIwNjgyMDgwOA ...

  6. 在html里网页中嵌入优酷的视频

    <html> <embed src="http://player.youku.com/player.php/sid/XMjAzOTk4NjI4/v.swf" qu ...

  7. ios UIWebView 播放优酷土豆视频

    将以下的代码嵌套在html里.然后webView载入这个网页.或这段html码,即可了,无须要使用像网上说的html5去兼容 watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  8. 全网VIP视频解析接口

    全网VIP视频在线解析可以免费观看[腾讯vip视频.爱奇艺vip视频.优酷VIP视频.土豆VIP视频.乐视VIP视频.芒果VIP视频]等等...可以vip免费观看.去广告等等. https vip视频 ...

  9. 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频

      视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频  2018-07-11 |  标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...

随机推荐

  1. 花一天时间踩了node npm的一个坑

    在一个后端眼里nodejs这工具真的难用,最近为了用elementui,然后去硬着头皮学vue,学着学着,发现还要去用node,webpack.真想掐死前端那一群人啊.... 好了,进入正题.话说我装 ...

  2. Visual Studio 调试系列5 检查变量(使用自动窗口和局部变量窗口)

    系列目录     [已更新最新开发文章,点击查看详细] 在调试时,“自动变量”和“局部变量”窗口会显示变量值. 仅在调试会话期间,这两个窗口才可用. “自动变量”窗口显示当前断点周围使用的变量. “局 ...

  3. Java-volatile底层实现原理

    一.volatile 代码 package jvm; public class VolatileVisibilityTest { private static boolean initFlag = f ...

  4. 剑指offer:剪绳子

    题目描述: 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可 ...

  5. Python 标准数据类型

    标准数据类型: Number(数字)----int float bool complex(复数) String(字符串) List(列表) Tuple(元组) Dictionary(字典) Set(集 ...

  6. 动手学深度学习6-认识Fashion_MNIST图像数据集

    获取数据集 读取小批量样本 小结 本节将使用torchvision包,它是服务于pytorch深度学习框架的,主要用来构建计算机视觉模型. torchvision主要由以下几个部分构成: torchv ...

  7. Loj #3124. 「CTS2019 | CTSC2019」氪金手游

    Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...

  8. vulnhub之SP:Harrison靶机

    下载地址:‘https://www.vulnhub.com/entry/sp-harrison,302/’ 环境:靶机放在virtualbox上运行,网卡模式 攻击机:kali Linux运行在VMw ...

  9. go-gin-api 路由中间件 - 签名验证(七)

    概览 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(实战篇),文章反响真是出乎意料, 「Go中国」 公众号也转发了,有很多朋友加我好友交流,直呼我大神,其实我哪是什么大 ...

  10. python的import和form...import的区别

    import和form...import的区别 参考链接 骏马金龙 https://www.cnblogs.com/lzc978/p/10105194.html 普通区别 import 使用impor ...