Scrapy 爬取m3u8视频

这篇具有很好参考价值的文章主要介绍了Scrapy 爬取m3u8视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Scrapy 爬取m3u8视频

【一】效果展示

  • 爬取ts文件样式

Scrapy 爬取m3u8视频,爬虫,爬虫案例,scrapy,音视频,爬虫,python

  • 合成的MP4文件

Scrapy 爬取m3u8视频,爬虫,爬虫案例,scrapy,音视频,爬虫,python

【二】分析m3u8文件路径

  • 视频地址:[在线播放我独自升级 第03集 - 高清资源](https://www.physkan.com/ph/175552-8-3.html)

【1】找到m3u8文件

  • 这里任务目标很明确
    • 就是找m3u8文件
  • 打开浏览器
    • 进入开发者模式F12
    • 搜索m3u8文件
    • 查看响应内容含有ts文件的m3u8文件
    • 再次查看标头地址即可

Scrapy 爬取m3u8视频,爬虫,爬虫案例,scrapy,音视频,爬虫,python

【2】分析m3u8路径

  • https://leshiyuncdn.36s.top/20240121/0RS6t7a1/2000kb/hls/index.m3u8
    • 按照/拆分:leshiyuncdn.36s.top----20240121----0RS6t7a1----2000kb----hls
    • 笨办法:一个个的进行搜索
    • 查看哪个找到m3u8的路径
  • 其中搜索leshiyuncdn.36s.top这个的时候
    • 查看响应中含有m3u8地址
    • 那么就继续分析这个地址

Scrapy 爬取m3u8视频,爬虫,爬虫案例,scrapy,音视频,爬虫,python

  • https://bfnb1sx.phvod.top/?url=O0O0OlHnRp0hcpHM6Ly9sZXNoO0O0OXl1bmNkbi4zNnMuo000oG9wLzIwMjQwMTIxLzBSUzZ0N2ExL2luZGV4Lm0zo000oTgoo00o&next=//www.physkan.com/ph/175552-8-4.html
    • 同样的采用笨方法:拆分一个一个的找
  • 在搜索O0O0OlHnRp0hcpHM6Ly9sZXNoO0O0OXl1bmNkbi4zNnMuo000oG9wLzIwMjQwMTIxLzBSUzZ0N2ExL2luZGV4Lm0zo000oTgoo00o的时候
    • 找到https://www.physkan.com/ph/175552-8-3.html里面含有我们搜索的内容
    • 并且这个地址就是浏览器的访问视频的地址
    • 好了,就是它了

Scrapy 爬取m3u8视频,爬虫,爬虫案例,scrapy,音视频,爬虫,python

【三】scrapy代码

【1】基础内容

class M3U8Spider(scrapy.Spider):
    # 爬虫文件名
    name = "m3u8"
    # 可访问的域名列表
    allowed_domains = ["www.physkan.com", 'bfnb1sx.phvod.top', 'leshiyuncdn.36s.top', 'tscdn.hyz1.top']
    # 起始地址
    start_urls = [
        "https://www.physkan.com/ph/175552-8-3.html"]
    # 视频存储路径
    video_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'video')
    # 确保文件创建好
    os.makedirs(video_path, exist_ok=True)
    # m3u8文件路径
    m3u8_path = os.path.join(video_path, 'index.m3u8')
    # ts文件路径
    ts_info_path = os.path.join(video_path, 'ts.txt')

【2】分析获取m3u8路径

  • 我们需要的数据发现在script的player_aaaa中
    • 正则匹配,json格式转换为字典格式,方便读取数据
    • 其中url含有我们需要的路径参数,但是不全
    • 所以补全路径发起请求
def parse(self, response):
    # 获取网页源码
    page_source = response.text
    # 分析源码可以发现需要的地址在script的player_aaaa中
    # 通过正则匹配获取
    pattern = r'var player_aaaa=({.*?})</script>'
    url_info_str = re.findall(pattern, page_source, re.DOTALL)[0]
    # json格式转换为字典,方便拿数据
    url_info_dict = json.loads(url_info_str)
    # 拼接m3u8路径
    m3u8_info_url = 'https://bfnb1sx.phvod.top/?url=' + url_info_dict['url']
    yield scrapy.Request(url=m3u8_info_url, callback=self.get_m3u8_url)
  • 这个地址还并非是直接的m3u8路径
    • 同样的获取m3u8路径参数
    • 拼接完整路径参数,就可以得到m3u8的真正路径
def get_m3u8_url(self, response):
    page_source = response.text
    pattern = r'var config = ({.*?})'
    m3u8_info_str = re.findall(pattern, page_source, re.DOTALL)[0]
    m3u8_info_dict = json.loads(m3u8_info_str)
    m3u8_url = m3u8_info_dict['url']
    m3u8_url = m3u8_url.rsplit('/', 1)[0] + '/2000kb/hls/index.m3u8'
    yield scrapy.Request(url=m3u8_url, callback=self.get_ts_list)

【3】获取过滤ts

  • 通过上面的地址获取到了index.m3u8文件
    • 先保存在本地一份,方便查看
    • 使用正则表达式过滤出ts视频
    • 还要保存一份ts文件路径在本地
      • 因为接下来使用ffmpeg工具进行视频合成
      • 格式要求file '视频路径.ts'
    • 最后异步发起ts视频文件请求
def get_ts_list(self, response):
    # 获取页面txt信息
    page_source = response.text
    # 保存在index.m3u8文件在本地
    with open(self.m3u8_path, mode='wt', encoding='utf8') as fp:
        fp.write(page_source)
        # 使用正则过滤拿出ts路径
        ts_urls = re.findall(r'https://tscdn.hyz1.top/[^\s]+.ts', page_source)
        # 保存的ts视频文件需要按照合成视频ffmpeg的格式拼接
        with open(self.ts_info_path, mode='wt', encoding='utf8') as fp:
            for ts in ts_urls:
                file_name = ts.rsplit('/', 1)[-1]
                file_path = os.path.join(self.video_path, file_name)
                # 保存ts文件,保存的为ts文件路径
                fp.write(f"file '{file_path}'" + '\n')
                # 异步发起ts视频文件的请求
                yield scrapy.Request(url=ts, callback=self.save_ts_file, meta={'file_path': file_path})

(3.1)小插曲

  • 在m3u8文件中
    • 你会发现这个不一样的地址
    • 其实这部分是广告,可以过滤掉

Scrapy 爬取m3u8视频,爬虫,爬虫案例,scrapy,音视频,爬虫,python

【4】保存ts文件、合成MP4文件

  • 首先进行ts文件保存
    • 这个没有什么好说的
    • 直接保存吧
def save_ts_file(self, response):
    # 保存ts文件本地
    file_path = response.meta.get('file_path')
    with open(file_path, mode='wb') as fp:
        fp.write(response.body)
        # 输出日志写不写都行
        self.log(f'保存成功:>>>{file_path.rsplit("/", 1)[-1]}')
  • 拼接ts文件为MP4视频文件

    • 需要用的工具是ffmpeg

    • 官网:Download FFmpeg

    • 去安装配置好环境变量即可

  • 合成MP4视频

    • 首先使用os模块切换到保存的ts文件路径下
    • 然后执行ffmpeg命令
      • ffmpeg -f concat -safe 0 -i ts.txt -c copy output.mp4
    • ts.txt是之前的保存的ts文件路径文件
      • 格式要求file '视频路径.ts'
    • output.mp4是合成后的mp4文件
      • 可自定义文件名等
    def close(spider, reason):
        # 爬虫执行完毕以后,拼接视频  工具:ffmpeg
        os.chdir(f'{spider.video_path}')
        os.system(f'ffmpeg -f concat -safe 0 -i ts.txt -c copy output.mp4')

免责声明

  • 本爬虫仅用于收集特定网站的信息,目的是进行数据分析,不得用于非法目的或侵犯他人隐私。对于因使用本爬虫造成的任何损失或法律责任,本人概不负责。

  • 本爬虫的数据可能存在不准确、不完整或不可用的情况,对于用户或第三方可能因此造成的任何损失,本人概不负责。文章来源地址https://www.toymoban.com/news/detail-852143.html

到了这里,关于Scrapy 爬取m3u8视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【爬虫】九、综合案例之m3u8文件

    视频网站常规处理方法: 用户上传视频–转码(处理视频)–切片处理(把单个文件进行拆分,一般把拆分好的文件放到M3U8、txt、json的文本中),用户在拖动进度条时则进入到某个分片中。 需要一个文件记录: 1.视频播放顺序。 2.视频存放路径。 抓取视频的方法: 1.找到

    2024年02月17日
    浏览(52)
  • python 爬虫 m3u8 视频文件 加密解密 整合mp4

    完整代码如下: 1. 认识m3u8文件 m3u8 的结构详细分析可以看这个链接m3u8 文件格式详解 - 简书 (jianshu.com),这里我们只简要介绍一下; 相信无论多小白都应该知道如何打开开发者模型解析得到下面的结果; 要注意的是,只有预览里面包含了 ts 信息的才算是我们需要的 m3u8 文件

    2024年02月20日
    浏览(49)
  • Python爬虫:通过js逆向获取某视频平台上的视频的m3u8链接

    1. 前言 现在我们在网页端看的视频,其前端实现原理就小编目前知道的而言,总的有两点:其一,直接就是一个mp4(或其他类似的)视频链接,如果我们能得到这个视频链接,直接用这个链接就能下载到这个视频;其二,和第一点差不多吧!但是直接用链接下载,获取不到视频文

    2024年02月08日
    浏览(52)
  • 「Python|音视频处理|场景案例」如何使用ffmpeg下载m3u8视频到本地并保存成mp4

    本文主要介绍如何使用ffmpeg批量下载视频到本地并保存成指定格式。 当我们希望将网页上的视频下载到本地的时候,我们可能获取到的视频地址是指向 .m3u8 格式的,当视频多的时候,手动下载并使用工具转换格式就显得工作量过大。 ffmpeg 是一个强大的音视频处理工具,具体

    2024年02月16日
    浏览(72)
  • 抓取m3u8视频

    视频url:https://www.9meiju.cc/mohuankehuan/shandianxiadibaji/1-1.html 打开网址分析当前视频是由多个片段组成还是单独一个视频 如果是一个单独视频,则找到网址,直接下载即可,如果为多个片段的视频,则需要找到片段的文件进行处理,本案例以m3u8为例 找到m3u8文件后进行下载,下载

    2024年02月11日
    浏览(45)
  • m3u8视频流,视频切片处理

    随着客户的增加,mp4文件播放的弊端也日益凸显。 mp4缺点 1):mp4的关键帧元素往往很大,需要加载很长时间才能开始播放。 2):当用户打开一个视频播放的时候,浏览器会持续请求下载mp4文件直到下载完成,就算是用户暂停视频播放浏览器也会持续这种下载状态,给服务器硬

    2024年02月02日
    浏览(58)
  • DPlayer m3u8 视频禁止下载

    正常的 m3u8 格式视频通过控制台是无法下载的,但是可以通过插件下载,下面介绍如何规避这个问题。 思路: 后端生成一个一次性的密钥,前端放在请求头中 ,可以防止大部分插件下载。这里只说前端。 集成 DPlayer 播放器这里就不说了,网上一大推。

    2024年01月24日
    浏览(39)
  • 【M3U8】python(流视频数据)

    现在大部分视频客户端都采用HTTP Live Streaming,而不是直接播放MP4等视频文件(HLS,Apple为了提高流播效率开发的技术)。HLS技术的特点是将流媒体切分为若干【TS片段】(比如几秒一段),然后通过一个【M3U8列表文件】将这些TS片段批量下载供客户端播放器实现实时流式播放

    2023年04月09日
    浏览(30)
  • uniapp m3u8格式视频加载

    uniapp一:mui-player:三方  h5 web app   uniapp 使用 mui-player 插件播放 m3u8/flv 视频流_翘翘红的博客-CSDN博客 uniapp 开发的h5项目,需要播放m3u8/flv后缀的视频,网上有很多视频插件,但是样式和效果不尽如人意,博主最后选择mui-player插件: 定制化稍微强一点以及有官方文档可以阅

    2024年02月12日
    浏览(42)
  • python 批量下载m3u8的视频

     前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:点击跳转 目录 一,猫抓获取视频地址 二,安装配置ffmpeg 1,windows使用 2,python使用 三,碧站视频 四,合并ts文件 1,背景 2,实现 4,缺点 五,下载m3u8视频 1,背景 2,实现V1 3,实

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包