Scrapy 爬取m3u8视频

news2024/12/23 13:07:34

Scrapy 爬取m3u8视频

【一】效果展示

  • 爬取ts文件样式

在这里插入图片描述

  • 合成的MP4文件

在这里插入图片描述

【二】分析m3u8文件路径

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

【1】找到m3u8文件

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

在这里插入图片描述

【2】分析m3u8路径

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

在这里插入图片描述

  • 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代码

【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文件中
    • 你会发现这个不一样的地址
    • 其实这部分是广告,可以过滤掉

在这里插入图片描述

【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')

免责声明

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

  • 本爬虫的数据可能存在不准确、不完整或不可用的情况,对于用户或第三方可能因此造成的任何损失,本人概不负责。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1581524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

featup入坑笔记

一、新建环境 在conda中建立一个虚拟环境featup&#xff0c; conda create -n featup python3.9 二、开始配置&#xff1a; 我是先下载了FeatUp&#xff0c;之后 pip install -e . -i https://mirrors.aliyun.com/pypi/simple/ 但是&#xff0c;突然出错了&#xff0c;说无法…

Day:004(4) | Python爬虫:高效数据抓取的编程技术(数据解析)

XPath工具 浏览器-元素-CtrlF 浏览器-控制台- $x(表达式) Xpath helper (安装包需要科学上网) 问题 使用离线安装包 出现 程序包无效 解决方案 使用修改安装包的后缀名为 rar&#xff0c;解压文件到一个文件夹&#xff0c;再用 加载文件夹的方式安装即可 安装 python若使用…

【2024年5月备考新增】《软考案例分析答题技巧(3)质量、资源》

2.5 项目质量管理 质量管理过程 质量管理过程:规划质量管理-管理质量-控制质量。 管理质量意义: ① 通过执行有关产品特定方面的设计准则,设计出最优的成熟产品; ② 建立信心,相信通过质量保证工具和技术(如质量审计和故障分析)可以使未来输出在完工时满足特定的需求…

动态规划刷题(2)之杨辉三角(详细解释)

最近在自学动态规划,网上到处找资料学习: 在这里记录我的刷题历史: 题目都是在力扣里面刷的!! 这里,我放一个刷动态规划的链接在这里:动态规划知识点题库 - 力扣(LeetCode) 力扣 在这里附加动态规划相关知识点:动态规划(DP)-CSDN博客文章浏览阅读197次。动态规划…

postgresql uuid

示例数据库版本PG16&#xff0c;对于参照官方文档截图&#xff0c;可以在最上方切换到对应版本查看&#xff0c;相差不大。 方法一&#xff1a;自带函数 select gen_random_uuid(); 去掉四个斜杠&#xff0c;简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…

从数据中台到上层应用全景架构示例

一、前言 对于大型企业而言&#xff0c;数据已经成为基本的生产资料&#xff0c;但是有很多公司还是值关心上层应用&#xff0c;而忽略了数据的治理&#xff0c;从而并不能很好的发挥公司的数据资产效益。比如博主自己是做后端的&#xff0c;主要是做应用层&#xff0c;也就是…

(源码+部署+讲解)基于Spring Boot + Vue编程学习平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f;…

HDFS [MSST‘10] 论文阅读笔记

原论文:The Hadoop Distributed File System (MSST’10) HDFS关键技术要点概览 设计目标:HDFS旨在可靠地存储大型数据集,并以高带宽流式传输这些数据集到用户应用程序。它通过在大量服务器上分布存储和计算资源,使得资源可以随着需求的增长而扩展,同时保持经济高效。架构组…

Day:004(3) | Python爬虫:高效数据抓取的编程技术(数据解析)

BS4实战-人民网 人民网_网上的人民日报 (people.com.cn)http://www.people.com.cn/ import requests from fake_useragent import UserAgent from bs4 import BeautifulSoupurl http://www.people.com.cn/ headers {User-Agent:UserAgent().chrome} # 发送请求 resp request…

前端入门:极简登录网页的制作(未使用JavaScript制作互动逻辑)

必备工具&#xff1a;vscode Visual Studio Code - Code Editing. Redefined 目录 前言 准备 HTML源文件的编写&#xff08;构建&#xff09; head部分 body部分 网页背景设置 网页主体构建 CSS源文件的编写&#xff08;设计&#xff09; 结果展示 前言 博主稍稍自…

基于ES-EKF的LiDAR/GNSS/IMU传感器融合轨迹估计(附项目源码)

基于改进EKF的LiDAR/GNSS/IMU传感器融合轨迹估计&#xff08;附项目源码&#xff09; 算法概述PredictionCorrectionES-EKF算法融合算法实现轨迹估计实验结果 最近在研究传感器融合&#xff0c;看到一个很好的开源项目&#xff0c;适合小白学习&#xff0c;为以后做传感器融合、…

Vue3 + Vite 构建组件库发布到 npm

你有构建完组件库后&#xff0c;因为不知道如何发布到 npm 的烦恼吗&#xff1f;本教程手把手教你用 Vite 构建组件库发布到 npm 搭建项目 这里我们使用 Vite 初始化项目&#xff0c;执行命令&#xff1a; pnpm create vite my-vue-app --template vue这里以我的项目 vue3-xm…

Rocky(Centos)数据库等高并发或高io应用,linux应调优系统

一、系统参数优化 默认的最大打开文件数是1024.不满足生产环境的要求。按照如下配置&#xff1a; 1、修改 systemctl管理的 servie 资源限制 编辑/etc/systemd/system.conf # 全局的打开文件数 DefaultLimitNOFILE2097152 # 全局打开进程数 DefaultLimitNPROC655352、调整系…

GitHub 仓库 (repository) Watch - Star - Fork - Follow

GitHub 仓库 [repository] Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库&#xff0c;今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高&#xff0c;代表…

(源码+部署+讲解)基于Spring Boot + Vue的车位租赁系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f;…

4.9总结(Stream流,方法引用概述 || 乘法逆元,组合数)

Stream流 基本概念&#xff1a;以更简便的方式操作集合数据的形式&#xff1b; Steam流的操作步骤&#xff1a; 获取Stream流 中间方法&#xff1a;去重&#xff0c;跳过&#xff0c;获取&#xff0c; 过滤&#xff0c; 合并流&#xff0c;转换类型&#xff1b; 终结方法&…

VR紧急情况模拟|V R体验中心加盟|元宇宙文旅

通过VR技术实现紧急情况模拟&#xff0c;提升安全应急能力&#xff01; 简介&#xff1a;面对突发紧急情况&#xff0c;如火灾、地震、交通事故等&#xff0c;正确的反应和应对能够有效减少伤害和损失。为了提高人们在紧急情况下的应急能力&#xff0c;我们借助先进的虚拟现实…

微软对其基于Arm的Windows系统终将超越苹果充满信心

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

关于Salesforce DevOps的理解

“DevOps”是一组结合了软件开发 &#xff08;Dev&#xff09; 和运营 &#xff08;Ops&#xff09; 的实践&#xff0c;可帮助团队更快、更可靠地构建、测试和发布软件。 DevOps 的核心理念包括持续集成&#xff08;Continuous Integration&#xff09;、持续交付&#xff08;…

实战要求下,如何做好资产安全信息管理

文章目录 一、资产安全信息管理的重要性二、资产安全信息管理的痛点三、如何做好资产安全信息管理1、提升资产安全信息自动化、集约化管理能力&#xff0c;做到资产全过程管理2、做好资产的安全风险识别3、做好互联网暴露面的测绘与管空4、做好资产安全信息的动态稽核管理 “摸…