吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1810|回复: 24
收起左侧

[Python 原创] 今天分享的是协程异步抓取影院加密视频

  [复制链接]
龍魂小白 发表于 2023-7-21 22:55
本帖最后由 龍魂小白 于 2023-7-21 22:59 编辑

今天分享的是协程异步抓取影院加密视频

共同学习进步

代码如下:

import asyncio
import os.path
import re
import os

import aiohttp
import requests

path = '影院'
# 自行替换该影院URL 主页:http://www.cdhxjdsb.com/
url = 'http://www.cdhxjdsb.com/dongzuopian/zhetianjinqu/1-1.html'
ts_url = []
headers = {
    'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

async def getindex_m3u8(url):
    '''

    :param url: 要下载的视频URL
    :return: 返回m3u8和key的数据
    '''
    # 获取index.m3u8的链接
    async with aiohttp.ClientSession(headers=headers) as session:
        async with session.get(url, verify_ssl=False) as get_url:
            data = await get_url.text()
    r = re.search('"url":"(.*?)"', data).group(1)
    # 去除转义符获得正确的index.m3u8链接
    env_key = r.strip().replace("\\", '')
    print(env_key)
    # 获取key加密文件后边进行解密
    key = env_key.replace('index.m3u8', 'enc.key')
    print(key)
    # 请求m3u8链接数据
    async with aiohttp.ClientSession(headers=headers) as session2:
        async with session2.get(env_key) as gei_m3u8:
            m3u8 = await gei_m3u8.text()

    # 请求key数据
    async with aiohttp.ClientSession(headers=headers) as session3:
        async with session3.get(key) as gei_key:
            m3u8_key = await gei_key.text()

    return m3u8, m3u8_key

async def mkdir_path(m3u8, m3u8_key):
    '''

    :param m3u8: 传入数据
    :param m3u8_key: 传入数据
    :return:
    '''
    # 创建文件夹,进行路径判断
    if not os.path.exists(path):
        # 创建文件夹
        os.mkdir(path)
        # 获取到的m3u8进行写入保存
    with open(os.path.join(path, 'index.m3u8'), 'w') as f:
        f.write(m3u8)
        # 获取到的key进行写入保存
    with open(os.path.join(path, 'enc.m3u8'), 'w') as a:
        a.write(m3u8_key)
        # 进行读取转换成自己的ts文件名
    with open(os.path.join(path, 'index.m3u8'), 'r') as r:
        date = r.readlines()
    aa = open(os.path.join(path, 'index2.m3u8'), 'w')
    e = 0
    # 遍历原m3u8文件
    for i in date:
        # 判断进行转换成自己的ts文件名
        if i.startswith("#"):
            # 判断URL是否存在
            if i.find('URI') != -1:
                uu = i
                i = re.sub(r'(#EXT-X-KEY:METHOD=AES-128,URI=)"(.*?)"',
                           f'#EXT-X-KEY:METHOD=AES-128,URI="enc.m3u8"', uu)
            aa.write(i)
            continue
        else:
            # 重写ts文件名
            aa.write(str(e) + '.ts' + '\n')
            ts_url.append(i.strip())
        e += 1

async def dowmlaod(index, value):
    '''

    :param index: 接受下标
    :param value: 接受URL
    :return:
    '''
    # 请求URL获取字节数据
    async with aiohttp.ClientSession(headers=headers) as session:
        async with session.get(value, verify_ssl=False) as get_url:
            data = await get_url.content.read()
        # 开始写入保存ts视频文件
        with open(os.path.join(path, f'{index}.ts'), 'wb') as f:
            f.write(data)
            print('下载完成' + str(index))

#
# # '''
# # 进行ts文件合并 解决视频音频不同步的问题 建议使用这种
# #   :param filePath:
# #   :return:
# # '''
# print('开始')
#
# ccc = os.chdir(path)
#
# os.system("ffmpeg -i index2.m3u8 -c copy cccc.mp4")
# print('结束')

async def ffmpeg():
    '''
    用ffmpeg合并处理加密
    :return: 
    '''
    print('开始')
    ccc = os.chdir(path)
    os.system("ffmpeg -i index2.m3u8 -c copy cccc.mp4")
    print('结束')

async def main():
    m3u8, m3u8_key = await getindex_m3u8(url)
    print(m3u8)
    print(m3u8_key)
    await mkdir_path(m3u8, m3u8_key)
    task = []
    # 遍历下载所有ts文件 (获取ts的URL和索引)
    for index, value in enumerate(ts_url):
        task.append(dowmlaod(index,value))

    await asyncio.gather(*task)
    await ffmpeg()

if __name__ == '__main__':
    asyncio.run(main())

免费评分

参与人数 9吾爱币 +13 热心值 +8 收起 理由
blankdream + 1 + 1 谢谢分享
lilihuakai + 1 + 1 我很赞同!
冂吉 + 1 + 1 我很赞同!
xinxiu + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
echoaku + 1 + 1 我很赞同!
99910369 + 1 谢谢@Thanks!
jczcyx + 1 我很赞同!
klxx1314520 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 龍魂小白 发表于 2023-7-27 21:47
目前正在学习框架,过几天分享
BLUE7777777 发表于 2023-7-22 00:57
记不清楚以前是在谁那看到一个:Webview2(不是Android的那个Webview,是微软的Webview2)+WinForm+C#+.net4.6+Selenium+JavaScript脚本自动化模拟人工组合操作后台批量下载XX网站视频。
同时也要吐槽一下,Webview2的样例代码太少了(要自己摸索,没得Ctrl+C、V)
me44 发表于 2023-7-22 07:00
daoye9988 发表于 2023-7-22 07:59
这个老厉害了
knight0531 发表于 2023-7-22 08:17
用的其他插件下载m3u8,下载的音影不同步。先收藏了。
echoaku 发表于 2023-7-22 09:30
厉害了,感谢老铁
xinxiu 发表于 2023-7-22 10:41
感谢分享,学习了。
鹿鸣 发表于 2023-7-22 11:07
最近在头疼这个,刚好用得到,
ZFY256 发表于 2023-7-22 11:28
又学到了,感谢!
头像被屏蔽
LM88 发表于 2023-7-22 11:33
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表