我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python爬取视频网站m3u8视频,下

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python爬取视频网站m3u8视频,下

最近发现一些网站,可以解析各大视频网站的vip。仔细想了想,这也算是爬虫呀,爬的是视频数据。

 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 “一出好戏” 。

分析页面

我用的是chrome浏览器,F12进入查看。选择NetWork的Doc,发现主体部分的数据是从这个网站获取的。

 

在地址栏输入这个链接,跳转到了视频来源的播放页面。

当然,在这个页面就可以直接观看视频了,但是我们要把视频下载下来。

寻找视频文件

仍然是之前那个页面,在Other中,我们发现了一些奇怪的东西。

查一下,m3u8是个啥东西。

m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。

这下就清楚了,这就是我们要找的东西。

点击Response,查看这个.m3u8的文件。观察发现,.ts后缀的文件地址是有规律的。我们只需要下载所有的.ts后缀文件,然后把它们整合成一个文件即可。

合并.ts文件

命令行:“copy /b  F:\f\*.ts  E:\f\new.ts”。

执行该命令后,F:\f目录下的全部TS文件就被合并成一个new.ts文件了(你原来的那堆文件仍然存在)。

这里使用copy命令的文件合并功能进行ts文件的合并,copy后面的 /b  参数表示把文件按二进制格式来合并,如果不加这个参数,则会把目标当成文本文件来合并,并在文件内添加不必要的标记,这会导致播放出错,所以必须加 /b 参数。

编写脚本,下载.ts文件

from urllib import request
import urllib
from time import sleep
import socket

class CatchVideo(object):
    def __init__(self):
        self.headers = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
        self.url = ""

    def set_url(self, i):
        if i < 1000:
            self.url = "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412%03d.ts" % i
        else:
            self.url = "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412%04d.ts" % i

    # 获取并下载ts文件
    def dl_ts(self, i):
        rq = request.Request(self.url)
        rq.add_header('User-Agent', self.headers)
        response = request.urlopen(rq)
        resread = response.read()
        with open(str(i)+".ts", "wb") as f:
            f.write(resread)
        response.close()# 关闭urlopen方法,防止被ban

    def start_work(self):
        for i in range(0, 1563+1):
            self.set_url(i)
            try:
                self.dl_ts(i)
                print(str(i) + ".ts  success")
                sleep(1)
            except urllib.error.URLError as e:
                print(e.reason)
                break
            except socket.timeout as e2:
                print(e2.reason)
                self.dl_ts(i)


if __name__ == '__main__':
    catch_video = CatchVideo()
    socket.setdefaulttimeout(20)
    catch_video.start_work()

 

运行过程中,出现了两次报错,分别是:

  • urllib.error.URLError :[WinError 10054]  远程主机强迫关闭了一个现有的连接
  • socket.timeout     read读取超时

解决办法:

  1.增加response.close,关闭urlopen方法。

  2.增加time.sleep,有一秒缓冲时间

  3.设置socket.setdefaulttimeout,给socket预留缓冲时间

还存在问题

实际运行过程中,脚本执行效率略低。之后会加入多线程,继续改进,增加运行效率。

 

 

参考博客:

 

https://blog.csdn.net/a33445621/article/details/80377424

https://blog.csdn.net/illegalname/article/details/77164521

 

 

更新代码,加入多进程

修改了start_work方法和主进程:

    def start_work(self, i):
        self.set_url(i)
        try:
            self.dl_ts(i)
            print(str(i) + ".ts  success")
            sleep(1)
        except urllib.error.URLError as e:
            print(e.reason)
            self.dl_ts(i)
        except socket.timeout as e2:
            print(e2.reason)
            self.dl_ts(i)


if __name__ == '__main__':
    catch_video = CatchVideo()
    socket.setdefaulttimeout(20)# 设置socket层超时时间20秒
    I = 0
    while I < 1563+1:
        # 5个进程并发运行
        p_l = [Process(target=catch_video.start_work, args=(i,)) for i in range(I, I+5)]
        for p in p_l:
            p.start()
        for p in p_l:
            p.join()
        I = I + 5

 

 

这里设置了5个进程同时运行,太多远程主机会拒绝请求。

 

OK,这样就能很快下载了。隔了几天终于想起来还有个电影没看,哈哈 ^_^

 

 

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python爬取视频网站m3u8视频,下

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python爬取视频网站m3u8视频,下

最近发现一些网站,可以解析各大视频网站的vip。仔细想了想,这也算是爬虫呀,爬的是视频数据。 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 “一出好戏” 。分析页面我用的是chrome浏览器,F12进入查看。选择Net
2023-01-30

python爬虫:爬取网站视频

python爬取百思不得姐网站视频:http://www.budejie.com/video/新建一个py文件,代码如下:#!/usr/bin/python# -*- coding: UTF-8 -*-import urllib,re,re
2023-01-31

Python - 下载视频网站的视频

import urllib2print "stand"for i in range(1, 23, 1): url = 'http://newoss.maiziedu.com/yxyh4/pand-%02d.mp4' % i f
2023-01-31

Python 自动爬取B站视频

文件名自定义(文件格式为.py),脚本内容:#!/usr/bin/env python#-*-coding:utf-8-*-import requestsimport randomimport timedef get_json(url):
2023-01-30

python爬取小视频

python爬取小视频记录学习python简单爬虫小程序,记录代码和学习过程环境信息python 2.7.12分析与步骤要分析网站信息 http://www.budejie.com/video/查看网页不同页面的信息: http://www
2023-01-31

ffmpeg网页视频流m3u8 ts怎么实现视频下载

这篇“ffmpeg网页视频流m3u8 ts怎么实现视频下载”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ffmpeg网页视频
2023-07-02

python怎么爬取视频

本篇内容介绍了“python怎么爬取视频”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!题目解析的爬取思路1.将所以题目的解析链接爬取出去单独
2023-06-02

python爬虫爬网站的视频和图片

环境:centos6.5 python2.6.6   http://www.budejie.com/( 纯属测试,并无恶意 )网站分析:我们点视频按钮 可以看到url是:http://www.budejie.com/video/接着我们点开
2023-01-31

python3爬虫(4)各种网站视频下载

理论上来讲只要是网上(浏览器)能看到图片,音频,视频,都能够下载下来,然而实际操作的时候也是有一定难度和技术的,这篇文章主要讲述各个网站视频资源如何下载。 B站视频页面链接:https://www.bilibili.com/bangumi/
2023-01-31

Python怎样爬取西瓜视频

Python怎样爬取西瓜视频,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、写在前面真的,为什么别人发游戏这么多人看,我发了两次了加起来才一百个。算了算了,不整游戏了,反
2023-06-21

Python爬虫之m3u8文件里提取小视频的正确姿势

目录前言1. HLS协议与m3u8文件3. 合成mp4文件4. 完整代码5. 结束语前言 在网上爬取的小视频(.ts格式)打不开怎么搞?使用IDM下载有时候还会出现数据受法律保护,IDM无法下载该内容,如何解决?这篇博客就来聊聊如何正确提取
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录