Python+FFmpeg爬取云播TV电影

前言

最近本人在学习如何用python写爬虫,看了B站大学里的视频以后,自己模仿着写了一个,并且加入了多线程。这个爬虫适用于m3u8链接需要获取两次的视频网站,使用正则表达式提取链接。先来整理一下思路: 1.拿到视频播放页面的源代码,检查视频播放区的元素 2.找到第一个m3u8链接(一般会用反斜杠转义,所以写爬虫时要去掉反斜杠) 3.下载第一个m3u8链接后,提取其中的路径部分,并与链接的公共部分拼接,获得第二个m3u8链接 4.ffmpeg配合多线程,下载视频 废话不多说,上代码!

正文

安装环境

1.Windows下载ffmpeg程序 先准备好ffmpeg:ffmpeg官网 选择对应版本下载并解压(我下载的是ffmpeg-n5.0-latest-win64-lgpl-5.0版本),并加入Windows系统变量(此电脑-属性-高级系统设置-环境变量): Windows添加环境变量 2.Python安装ffmpy3库:

pip3 install ffmpy3 -i https://mirrors.aliyun.com/pypi/simple/ 

编写代码

#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
#
# Copyright (C) 2022 HackerTerry, Inc. All Rights Reserved
#
# @Time   : 2022/2/3 14:07
# @Author : Terry Zhang
# @Email   : goudan1974@163.com
# @Blog   : https://terry906.top
# @File   : 线程池爬云播TV视频.py
# @Software: PyCharm

import requests
import re
from concurrent.futures import ThreadPoolExecutor
from ffmpy3 import FFmpeg

def get_first_m3u8(url,headers):  # 获取第一个m3u8链接
   resp = requests.get(url,headers)
   obj = re.compile(r'"link_pre":"","url":"(?P<first_m3u8>.*?)","url_next"',re.S)  # 正则表达式可按需要修改
   m3u8_url = obj.finditer(resp.text)
   for it in m3u8_url:
       first_m3u8 = it.group("first_m3u8").replace("\\","")
       print(first_m3u8)
       return first_m3u8

def download_first_m3u8(url,name,headers):  # 读取第一个m3u8文件的内容
   resp = requests.get(url,headers)
   with open(name, "w", encoding="utf-8") as f1:
       f1.write(resp.text)
   with open(name,"r") as f2:
       for line in f2:
           if line.startswith("#"):
               continue
           else:
               line.strip()
               print(line)
               return line

def get_second_m3u8(url,headers):  # 获取第二个m3u8链接
   first_m3u8 = get_first_m3u8(url,headers)
   line = download_first_m3u8(first_m3u8,"爬到的视频/first_m3u8.txt",headers)
   second_m3u8 = first_m3u8.split("/20220112")[0] + line
   print(second_m3u8)
   return second_m3u8

def ffmpeg_path(inputs_path, outputs_path):  # ffmpeg下载函数
   '''
  :param inputs_path: 输入的文件传入字典格式{文件:操作}
  :param outputs_path: 输出的文件传入字典格式{文件:操作}
  :return:
  '''
   a = FFmpeg(
               inputs={inputs_path: None},
               outputs={outputs_path: '-c copy',
                        }
  )
   print(a.cmd)
   a.run()

if __name__ == '__main__':
   url = "https://www.yunbtv.net/vodplay/ITgou-1-1.html"  # 使用时只需更改这里的URL即可
   headers = {
       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
       "Referer": "https://www.yunbtv.net/"
  }
   second_m3u8 = get_second_m3u8(url,headers)
   with ThreadPoolExecutor(50) as t:
       t.submit(ffmpeg_path,second_m3u8,"爬到的视频/IT狗第一集.mp4")

这里由于第二个m3u8文件中自带AES解密密钥的链接地址,所以无需单独考虑解密的问题,交给ffmpeg解决即可。

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

感谢大家的耐心阅读,如有疑问,敬请在评论区留言!本文为明赫IT大本营的原创文章,经实践,测试,整理后发布。如需转载请联系作者获得授权,并注明转载地址:https://terry906.top/pythonffmpeg%e7%88%ac%e5%8f%96%e4%ba%91%e6%92%adtv%e7%94%b5%e5%bd%b1/
由于本人是学生党,维护服务器一直是用爱发电的状态。如果您恰巧财力雄厚,感觉本文对您有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN费用等)。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇