Python抓取下载M3U8小鹅通回放视频代码

1、先找到视频对应的m3u8地址,打开开发者工具,找到getPlayUrl,返回的json里边有一个视频的play_url地址;

 

2、可以下载m3u8文件,使用记事本打开,查看文件内容。

 

 

3、使用Python解析m3u8文件里的url,进行视频下载。

import time
import requests
import re
from Crypto.Cipher import AES
#这个url里找response,"play_list"->"play_url"的值
#https://appfu6neoom7322.h5.xiaoeknow.com/xe.material-center.play/getPlayUrl

def m3u8(name,url):
    header = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    }
    # requests得到m3u8文件内容
    content = requests.get(url ,headers=header).text
    if "#EXTM3U" not in content:
        print("这不是一个m3u8的视频链接!")
        return False
    if "EXT-X-KEY" not in content:
        print("没有加密")
        return False

    # 使用re正则得到key和视频地址
    jiami =re.findall('#EXT-X-KEY:(.*)\n' ,content)
    key =re.findall('URI="(.*)"' ,jiami[0])
    vi = re.findall('IV=(.*)' ,jiami[0])[0]

    # 得到每一个ts视频链接
    tslist =re.findall('EXTINF:(.*),\n(.*)\n#' ,content)
    newlist =[]
    for i in tslist:
        newlist.append(i[1])

    # 得到key的链接并请求得到加密的key值
    keyurl =key[0]
    keycontent= requests.get(keyurl ,headers=header).content

    # 得到每一个完整视频的链接地址
    base_url = url.replace(url.split('/')[-1] ,'')
    # print(base_url)
    tslisturl =[]
    for i in newlist:
        tsurl = base_url + i
        tslisturl.append(tsurl)

    # 得到解密方法,这里要导入第三方库  pycrypto
    # 这里有一个问题,安装pycrypto成功后,导入from Crypto.Cipher import AES报错
    # 找到使用python环境的文件夹,在Lib文件夹下有一个 site-packages 文件夹,里面是我们环境安装的包。
    # 找到一个crypto文件夹,打开可以看到 Cipher文件夹,此时我们将 crypto文件夹改为 Crypto 即可使用了
    # 必须添加b'0000000000000000',防止报错ValueError: IV must be 16 bytes long
    cryptor = AES.new(keycontent, AES.MODE_CBC, b'0000000000000000')

    # for循环获取视频文件
    for i in tslisturl:
        print(i)
        res = requests.get(i, header)
        # 使用解密方法解密得到的视频文件
        cont =cryptor.decrypt(res.content)
        # 以追加的形式保存为mp4文件,mp4可以随意命名,这里命名为小鹅通视频下载测试
        with open(name+'.mp4', 'ab+') as f:
            f.write(cont)
    return True

if __name__ == '__main__':

    my_dict = {
        "龙舒净土文05": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lyjt59g30y80/drm/main.m3u8?sign=cd529f061a9cf89079a003bcfa30a328\u0026t=6867d6a3\u0026us=QqQZBMECZJ",
        "龙舒净土文06": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lxrbine20v12/drm/main.m3u8?sign=bbd4b2a8c72ef1e3b0e83c842e160b9f\u0026t=6867d947\u0026us=RwtbXCUrDW",
        "龙舒净土文07": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lxrbine20vkl/drm/main.m3u8?sign=1ef7c3b6a377312a047f74b22b10eabd\u0026t=6867de48\u0026us=sQiZANeidU",
        "龙舒净土文08": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lxrbine20x9j/drm/main.m3u8?sign=b6367264de990fa903f84c5d9239b10c\u0026t=6867dee2\u0026us=npOTzOMxmY",
        "龙舒净土文09": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lxrbine20176/drm/main.m3u8?sign=85bd603dbb637f0d4a545d593e327a47\u0026t=6867df37\u0026us=jVupjcVIWy",
        "龙舒净土文10": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lxrbine209bo/drm/main.m3u8?sign=5379f1459eeb8010cc882485c666ce7e\u0026t=6867dfb5\u0026us=TshqKKVIGz",
        "龙舒净土文11": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lyjt59g3059v/drm/main.m3u8?sign=2618104b9c162d31b9c2f8cf62aaacba\u0026t=6867e771\u0026us=TkhGdFMJoq",
        "龙舒净土文12": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lyjt59g30169/drm/main.m3u8?sign=2e34b46f624b66f2ee51d7a5661c1887\u0026t=6867e7ca\u0026us=nhgbtZwbuf",
        "龙舒净土文13": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lyjt59g308j9/drm/main.m3u8?sign=38b3db3b5ecce4d0b0a2f0b0190fc3e1\u0026t=6867e8b5\u0026us=kirvbcZNQG",
        "龙舒净土文14": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lyjt59g30xud/drm/main.m3u8?sign=7408f7e756e1b2cf95cc47071a49af54\u0026t=6867ec85\u0026us=ufhYMrNZug",
        "龙舒净土文15": "https://v-vod-k.xiaoeknow.com/a8307e36f7a64aeeae086cc157bb356b/appfu6neoom7322/video/b_u_63904cd9453d8_Mx7BCQdl/lyjt59g30n6o/drm/main.m3u8?sign=13d991efb2dcae958970eb09f874b338\u0026t=6867edbb\u0026us=oSoeSSIMtq"
    }

    # 这个是网页上查到的小鹅通的卖u8地址
    for key in my_dict:
        print(key, my_dict[key])
        pd = m3u8(key,my_dict[key])
        if pd:
            print('视频下载完成!')
        time.sleep(5)  # 暂停执行5秒

 

4、查看下载好的视频。

 

参考: https://www.cnblogs.com/chenlove/p/13611796.html

posted @ 2025-07-06 11:08  思凡念真  阅读(670)  评论(0)    收藏  举报