ligxi 发表于 2020-6-20 15:38

通过Python保存央视频某主题的视频地址[失效]

本帖最后由 ligxi 于 2021-3-29 00:20 编辑

测试地址:https://v.cctv.com/
主要获取的是央视频分类下的视频区,某个主题下的视频地址并保存到文件中


m3u8的链接可以用播放器直接播放,比如Potplayer打开链接即可;
MP4视频有不同的分辨率,可以选择不同的分辨率进行下载和合并。

比如这个视频:https://v.cctv.com/2020/05/31/VI ... AJGE.ECW6gIhV6rsX.6

import requests
import time
import hashlib
import re
import json

headers = {
    'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1'
}

# 测试地址:
# cctv_url = 'https://v.cctv.com/2020/05/31/VIDELxZ6fRrVKzIh0cHiR8v3200531.shtml'
cctv_url = input('请输入视频地址:')
rs = requests.get(cctv_url, headers)
rs.encoding = 'utf-8'
html_data = rs.text
#
title = re.search('<title>(.*?)</title>', html_data).group(1)
print('主题:%s' % title)
# 解决平台特殊符号问题
new_title = title.replace('/', ' ').replace(':', ':').replace('*', ' ') \
    .replace('?', '?').replace('<', ' ').replace('>', ' ').replace('|', ' ').replace('\\', ' ')
#
rec = re.compile('var guid = "(.*?)";')
content = re.search(rec, html_data)
# 求出vc
guid = content.group(1)
vdn_tsp = str(int(time.time()))
vdn_vn = "2049"
vdn_vc = ""
staticCheck = "47899B86370B879139C08EA3B5E88267"
vdn_uid = ""
#
new_str = (vdn_tsp + vdn_vn + staticCheck + vdn_uid)
vc = hashlib.md5(new_str.encode(encoding='UTF-8')).hexdigest().upper()
# 接口
url_data = f'pid={guid}&tai=ipad&from=html5&tsp={vdn_tsp}&vn=2049&vc={vc}&uid=&wlan='
url = 'https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?%s' % url_data
res = requests.get(url=url, headers=headers)
print(res.status_code)
data = res.text

# 处理请求
start = data.find("'{")
end = data.find(";")
j_data = json.loads(data)
#
video = j_data['video']
# 保存到文件
with open('%s.txt' % new_title, 'w', encoding='utf-8') as ff:
    # m3u8地址
    ff.write('m3u8地址:\n')
    ff.write(j_data['hls_url'] + '\n\n')
    ff.write('MP4地址:\n')
    for value in video:
      vv = video
      if type(vv) == list:
            for u in vv:
                video_url = u['url']
                print(video_url)
                ff.write(video_url + '\n')


测试效果:


总结:
总体来说不难,只需要模拟出请求的参数就基本能拿到和视频地址相关的数据了。:loveliness:

学惭淹贯 发表于 2021-3-25 15:34

佚名RJ 发表于 2020-6-20 16:42
加密的并且可以播放的视频链接来一个,我试试哈

老兄,比如这个:https://tv.cctv.com/2021/03/20/VIDEcHt7rIgEd884Qk011jTm210320.shtml?spm=C28340.P10QUzIsypHP.EHrGib9urQ1j.4
用IDM下载的ts文件没法播放,一篇灰色,只有声音。抓取的m3u8链接,用m3u8下载器下载的mp4文件也是播放的时候是灰色,只有声音,没有图像。是视频加密的原因吗?

佚名RJ 发表于 2020-6-20 17:06

ligxi 发表于 2020-6-20 16:46
一时半会找不到好测试的,要不这个吧,新东方在线:
https://www.koolearn.com/product/c_34_45315.html ...
还真的可以,就是我的网络差,我就不下载全部了,
你看图吧,我给你证明一下,可以下载。
下载下来就是之前我给你第一次发图时的效果。

hj170520 发表于 2020-6-20 15:50

可以的,学习一下。

Zeaf 发表于 2020-6-20 16:00

这是不是那个悬赏解决了。。。
当时m3u8怎么弄搞不明白

zpwz 发表于 2020-6-20 16:00

感谢分享
个人觉得:手机央视频--投屏+电脑DLNA(论坛作品),最好最清晰最流畅最稳定的看央视,卫视的方法

ligxi 发表于 2020-6-20 16:02

zpwz 发表于 2020-6-20 16:00
感谢分享
个人觉得:手机央视频--投屏+电脑DLNA(论坛作品),最好最清晰最流畅最稳定的看央视,卫视的 ...
其实我不怎么看{:1_907:}

KSPprince 发表于 2020-6-20 16:04

怎么不引用json,还用字符串的方式处理呢

佚名RJ 发表于 2020-6-20 16:05

这个不挺好保存的吗?超清无码1080p 只要是网页上的,能播放的视频,就没有我保存不下来的。

ligxi 发表于 2020-6-20 16:08

本帖最后由 ligxi 于 2020-6-20 16:10 编辑

佚名RJ 发表于 2020-6-20 16:05
这个不挺好保存的吗?只要是网页上的,能播放的视频,就没有我保存不下来的。
要是我把它写成批量呢?{:1_918:}其实还是有很多视频保存不了的,比如培训的视频全是加密的,IDM有些网站受保存也下载不了,排除录屏!
求方法{:301_1004:}

ligxi 发表于 2020-6-20 16:12

KSPprince 发表于 2020-6-20 16:04
怎么不引用json,还用字符串的方式处理呢
那是因为这个接口它返回的不是JSON,而是JS的字符串,而数据就藏在JS字符串中!!!:'(weeqw不然早就用JSON解析了。

佚名RJ 发表于 2020-6-20 16:42

ligxi 发表于 2020-6-20 16:08
要是我把它写成批量呢?其实还是有很多视频保存不了的,比如培训的视频全是加密的,IDM有些网站 ...

加密的并且可以播放的视频链接来一个,我试试哈
页: [1] 2 3 4
查看完整版本: 通过Python保存央视频某主题的视频地址[失效]