szsnk144864 发表于 2022-8-24 12:37

可批量爬取某影视工厂 m3u8 文件

本帖最后由 szsnk144864 于 2022-8-25 20:45 编辑

昨天在52里寻求了一下了各位大佬的帮助,终于解决了问题(帖子地址:https://www.52pojie.cn/thread-1679009-1-1.html),十分感谢各位大佬的帮助。

虽然各位大佬给了我很多帮助,让我把代码弄出来了,有些视频可以下载,有些不行,但是我的理解能力有限,写的不怎么很好,还请各位大佬勿喷,,

此代码只获取m3u8地址,并不下载视频,因为多线程和合并我不会写,,,我的思路是把m3u8文件弄下来,然后根据通过N_m3u8DL下载器批量下载。

但是在下载的过程中发现,不知道是不是下载器线程太多,导致下载几集之后,下载器就显示m3u8文件失效了,下载失败,只有重新获取m3u8文件才行,也挺麻烦的,,,,,,



import requests
import re
import json
import base64

headers = {
    # 'Referer': 'https://www.ysgc.vip/vodplay/17287-2-1.html',
    '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'
}


# 获取视频的名称和视频的 m3u8 文件
def get_m3u8():
    # 用来存储 m3u8 地址
    video_path = 'd://desktop/数码宝贝' + '.txt'
    with open(video_path, 'w', encoding='utf-8') as fp:
      fp.write(' ')
    fp.close()
    qq = open(video_path, 'w', encoding='utf-8')

    # 用来存储所有集数的播放链接
    play_url = []

    session = requests.Session()
    # 通过循环来获取每个播放页面,55 指的是播放集数 ,vodplay后面的 17287-2 是播放的位置,修改也就是修改这里
    for s in range(31, 40):
      lang_url = 'https://www.ysgc.vip' + f'/vodplay/17287-2-{s}.html'
      play_url.append(lang_url)

    # 通过循环来获取每一集的 m3u8 文件
    for i in play_url:
      # 获取视频名称
      video_name = (re.findall(r'<title>(.*?)免.*?</title>', (session.get(i).text)))
      # 获取 var play = {} 数据
      get_var_play = json.loads(re.findall(r'<script type="text/javascript">var player_aaaa=(.*?)</script>', (session.get(i).text)))
      # 获取视频真实播放链接,并直接获取该地址的源代码,这里的dplay ,要根据解析平台需要自己修改,例如某讯视频就得用qq
      video_url = session.get(f'https://www.ysgc.vip/static/player/dplayer.php?url={get_var_play["url"]}').text
      # 获取m3u8的加密地址
      m3u8_url = re.findall(r"var.*?urls.*?=.*?'(.*?)';", video_url)
      # 解密地址,并通过切割获取到m3u8链接,最后删除后面的9位数,得到最终的结果
      m3u8_true_url = ('http:' + (((str(base64.b64decode(m3u8_url.encode()))).split(' ')).split('https:')))[:-9]

      # 写入文件
      qq.write(str(video_name) + ',' + str(m3u8_true_url) + '\n')
      print(str(video_name) + '   >>>>>>>>>>> 写入完成')

    session.close()
    qq.close()


get_m3u8()

a434024 发表于 2022-8-25 14:37

szsnk144864 发表于 2022-8-24 16:46
这个还真没遇到过,会不会是音频跟视频是分开的,只下载了音频?

这个就不清楚了 因为是同一个网站 用同一样的代码下载下来的有些没问题 有些就会出现这样的情况

szsnk144864 发表于 2022-8-24 16:46

a434024 发表于 2022-8-24 16:44
不知道楼主有没有遇到过下载的m3u8合并mp4后只有声音 没有画面的情况

这个还真没遇到过,会不会是音频跟视频是分开的,只下载了音频?

怜渠客 发表于 2022-8-24 12:48

m3u8失效,有一种可能是m3u8是短时播放链接,往往是实时更新的

szsnk144864 发表于 2022-8-24 12:56

lianquke 发表于 2022-8-24 12:48
m3u8失效,有一种可能是m3u8是短时播放链接,往往是实时更新的

原来如此{:1_893:}

windsecret 发表于 2022-8-24 13:29

牛啊大佬

szsnk144864 发表于 2022-8-24 13:36

windsecret 发表于 2022-8-24 13:29
牛啊大佬

还有bug,有一些视频解密之后的m3u8文件不能用,,,,

HLT 发表于 2022-8-24 14:39

他们设置m3u8缓存有时效的,拿到也没多大用处

feichu 发表于 2022-8-24 15:48

有没有一种可能 网站限制了。一个ip只可以获取多少 或者规定时间内获的多久封ip?多搜集一点cookie 估计能改善。

a434024 发表于 2022-8-24 16:44

不知道楼主有没有遇到过下载的m3u8合并mp4后只有声音 没有画面的情况

szsnk144864 发表于 2022-8-24 16:47

feichu 发表于 2022-8-24 15:48
有没有一种可能 网站限制了。一个ip只可以获取多少 或者规定时间内获的多久封ip?多搜集一点cookie 估计 ...

有可能,试试看
页: [1] 2 3
查看完整版本: 可批量爬取某影视工厂 m3u8 文件