吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13347|回复: 104
收起左侧

[Python 原创] 【详细】Python爬虫获取某影视网站视频的m3u8,并批量视频下载

    [复制链接]
szsnk144864 发表于 2022-11-29 15:12
本帖最后由 szsnk144864 于 2022-12-8 12:37 编辑

自用的一个 python 爬虫代码,想到当初我就看了一点教程,就硬着头皮来写,不断的到52大家庭里来问,模仿,


到现在会写一点爬虫,想把自己的代码分享出来,给那些刚学的伙伴们一点点指引(大佬勿喷啊)


自己也还在不断学习中,希望有大佬可以对代码进行一点指点

下载的时候尽量把线程调小一点,对网站温柔一点哈
本代码仅供学习交流,如作他用所承受的责任一概与我无关
QQ截图20221129151206.png


[Python] 纯文本查看 复制代码
import time
import requests
import base64
import re
from H_m3u8DL import m3u8download

'''
    这是我的思路,小白一枚,希望大佬多多指点,♪(・ω・)ノ
    1.首先获取网站源代码 >>> response
    2.接着获取播放视频的链接 >>> video_json  并进行组合,得到完整链接 >>>url_value
    3.将获取播放视频的 m3u8 地址,得到一个加密 m3u8  >>> base64_str
    4.然后将加密的 m3u8 文件解密,得到最终得到未加密的 m3u8 下载链接 >>> m3u8_true_url
    5.最后通过 m3u8 下载工具,或者 python 里的 m3u8下载(需要先pip install H_m3u8DL)
    注意!
    下载视频的时候尽量别把线程数调大,对网站温柔一点
'''
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'
}


def get_video_m3u8(url):
    # 获取源网页代码
    response = requests.get(url=url, headers=headers)
    # 通过获取 var play = {} 数据,得到新的视频链接后面部分,得到的数据有双引号,加上eval,就可以去除双引号,我是这么理解的,O_o
    video_json = eval(re.findall((r'var player_aaaa=(.*?)</script><script type='), (response.text), re.I)[0])
    # 获取视频名称
    video_name = video_json.get('vod_data').get('vod_name') + " 第" + str(video_json.get('nid')) + '集'
    # 将得到的字符串进行组合,得到完整的真实网页视频播放界面
    url_value = f"https://www.ysgc.vip/static/player/dplayer.php?url={video_json.get('url')}"
    # 获取真实网页里的 URL 加密数据,后面解密就可以得到m3u8文件了
    base64_str = re.findall('(?<!//)var urls = (.*?);', (requests.get(url=url_value, headers=headers)).text, re.I)[0]
    # 解密  [14:-8] 的意思是删除前面14个字符,和后面8个字符
    m3u8_true_url = (base64.b64decode(base64_str.encode()))[14:-8].decode('utf-8')
    response.close()
    # 下面这一步,其实我也不理解为啥这样做,但是不这么做就会报错,O_o
    return video_name, m3u8_true_url


def download_video(url, path):
    # 获取得到的 m3u8 链接和视频名称
    title, m3u8url = get_video_m3u8(url)
    # m3u8 下载器,按住键盘 Ctrl键并鼠标点击 m3u8download ,可以对 m3u8 下载器调整
    m3u8download(m3u8url, title=title, work_dir=str(path))

# 分析视频播放页面链接,通过 for 循环,将所有集数进行下载
for lv in range(1, 481):
    # f 后面的地址就是视频播放页面地址
    download_video(f'https://www.ysgc.vip/vodplay/323-4-{lv}.html', ('K:/新建文件夹/动漫/蜡笔小新/蜡笔小新第一季/'))
    print('>>>>>>>>>>>>>>>>>>> ' + '第 ' + str(lv) + ' 集写入完成!' + '\n')
    time.sleep(10)



免费评分

参与人数 14吾爱币 +12 热心值 +12 收起 理由
XiaoBai.Q.Q + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
echoaku + 1 + 1 用心讨论,共获提升!
知意执意 + 1 + 1 谢谢@Thanks!
xiaotian35 + 1 + 1 我很赞同!
寻寻觅觅x + 1 热心回复!
laoda1228 + 1 + 1 谢谢@Thanks!
yxh19 + 1 + 1 谢谢@Thanks!
wuailuntanpeng + 1 我很赞同!
O2H2O + 1 + 1 谢谢@Thanks!
hnnydx230 + 1 + 1 谢谢@Thanks!
masaminaomi + 1 + 1 1
wawudadong3664 + 1 + 1 谢谢@Thanks!
zhaoqingdz + 1 谢谢@Thanks!
Syqwertyuio + 1 + 1 我很赞同!

查看全部评分

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

hecoter12138 发表于 2023-2-16 13:18
kuaibeyond 发表于 2023-2-16 12:22
安装了,也导入了,但是运行失败,不知道咋回事

https://github.com/hecoter/hm3u8dl_cli
之前的库停更了,换了个名字
无字情书 发表于 2022-11-29 15:19
download_video()函数中调用了get_video_m3u8()并赋值。所以get_video_m3u8()需要有返回值,也就是这个必须要写return video_name, m3u8_true_url
shadowquill 发表于 2023-3-19 23:16
大佬,我想问一下m3u8后缀的playsessionid是什么来的?我问gpt说是记录播放进度的。我想下载emby的视频,发现实现找好的m3u8链接过一段时间或者关闭下载后就无法再使用了。看了新建下载和之前的链接,所有内容基本都相同,就这个playsessionid不同。现在很困惑,如果这个限制了下载,那就没法批量下载了,只能一次下载一个。不知道有没有办法能够解决呢?有人了解过emby的下载吗?
tomhex 发表于 2022-11-29 15:17
谢谢大神分享!学习了
头像被屏蔽
jifengjian 发表于 2022-11-29 15:35
提示: 作者被禁止或删除 内容自动屏蔽
1027770103 发表于 2022-11-29 15:45
谢谢大神分享
xhh297 发表于 2022-11-29 15:54
感谢分享
scszmj 发表于 2022-11-29 16:07
跟着楼主学习
Liao594 发表于 2022-11-29 16:08
漂亮,太好了
ofw 发表于 2022-11-29 16:41
学习了。。。
52xingkong 发表于 2022-11-29 16:45
吾爱 助力每一个梦想!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-28 07:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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