Python爬取blob:http//的视频(无需安装任何软件和插件)

目录

    • 写作原由
    • 什么是blob
    • 下面我们正式开始视频的爬取!!!
      • 此路不通
      • 另辟蹊径
      • 代码走起(我写的是最简略的代码,最好再加个异常处理机制)
      • 最后是所有ts文件的合并

写作原由

前两天心血来潮想要爬视频,于是就在CSDN上找方法,结果发现要么就是需要下载一些软件(基本没有官网可以下载)要么就是爬取的是非blob视频,(但现在的网站几乎都采用blob格式),于是想要写这篇博客与大家分享一下折腾了几天的收获。

什么是blob

blob 其实是 h5 表征的 Blob 对象数据,我们可以使用 Blob 对象隐藏真实的资源路径,在一定程度上可以起到数据的加密性,更多的是为了干扰爬虫。具体请看下面这篇博客。
blob:http 地址的原理及生成方法

下面我们正式开始视频的爬取!!!

此路不通

首先我们选取一个网站——以韩剧TV为例

Python爬取blob:http//的视频(无需安装任何软件和插件)_第1张图片
搜索电视剧——邪恶之花
Python爬取blob:http//的视频(无需安装任何软件和插件)_第2张图片
点击第一集播放
Python爬取blob:http//的视频(无需安装任何软件和插件)_第3张图片
这时我们发现并无下载按钮

于是按住F12(有些电脑需要按住Fn+F12)查看网页源代码,想要获取视频资源地址
Python爬取blob:http//的视频(无需安装任何软件和插件)_第4张图片
然而我们发现这是被blob加密过的,这条路显然行不通

另辟蹊径

下面就到了见证奇迹的时候了
点击Network,再点击XHR
Python爬取blob:http//的视频(无需安装任何软件和插件)_第5张图片
根据提示按住F5(有些电脑需要按住Fn+F5),再点击播放按钮,这时你会发现出现了许多个ts文件
Python爬取blob:http//的视频(无需安装任何软件和插件)_第6张图片

Python爬取blob:http//的视频(无需安装任何软件和插件)_第7张图片
一个完整的视频被切割成了许许多多个带有连续资源地址ts文件,每一个ts文件一般5秒左右。
左击最开始的那一个,注:是.ts文件不是.m3u8文件,点开后右边就是资源地址
Python爬取blob:http//的视频(无需安装任何软件和插件)_第8张图片
Python爬取blob:http//的视频(无需安装任何软件和插件)_第9张图片

这些ts文件的资源地址是连续的,如果一个个手动点击下载显然太麻烦了(当然你时间充裕的话可以双击直接一个个手动下载),这里我们就需要用到爬虫了
注:写代码时资源地址需要被拆分成两部分,千万别一股脑儿复制粘贴,分开的部分就在资源的地址的结尾,因为需要用到循环

代码走起(我写的是最简略的代码,最好再加个异常处理机制)

爬取第0-9个ts文件

import requests

for i in range(0,10):

    url1="https://fangao.qfxmj.com/concat/20200730/8c389a029ad844d3b9db8e111c5f5030/cloudv-transfer/a06e0a770b904002b46560e905257010_000000"  
    url2=str(i)+".ts"
    url=url1+url2     # 因为资源地址是连续且有规律的,所以将其拆分 
    
    root="E:\\video\\" #根目录自己建
    path=root+ url2     #路径分为两部分根目录和文件名
    
    r=requests.get(url)       #获取资源地址
    
    with open (path,'wb') as f:  #文件的打开和保存
        f.write(r.content)
        f.close()
        print("第{}文件保存成功".format(i))

Python爬取blob:http//的视频(无需安装任何软件和插件)_第10张图片
后面两个代码和前面这个基本相同,只有稍许的改动

爬取第10-99个ts文件

import requests

for i in range(10,100):
    url1="https://fangao.qfxmj.com/concat/20200730/8c389a029ad844d3b9db8e111c5f5030/cloudv-transfer/a06e0a770b904002b46560e905257010_00000"
     #注意零的个数
    url2=str(i)+".ts"
    url=url1+url2
    root="E:\\video\\"
    path=root+ url2
    r=requests.get(url)
    with open (path,'wb') as f:
        f.write(r.content)
        f.close()
        print("第{}文件保存成功".format(i))

爬取第100-1000个ts文件

import requests

for i in range(100,1000):
    url1="https://fangao.qfxmj.com/concat/20200730/8c389a029ad844d3b9db8e111c5f5030/cloudv-transfer/a06e0a770b904002b46560e905257010_0000"  
    #注意零的个数
    url2=str(i)+".ts"
    url=url1+url2
    root="E:\\video\\"
    path=root+ url2
    r=requests.get(url)
    with open (path,'wb') as f:
        f.write(r.content)
        f.close()
        print("第{}文件保存成功".format(i))

一般一个视频也就1000个左右ts文件

最后是所有ts文件的合并

可以看下面这篇博客
ts文件的合并
0-9 合并一次,10-99合并一次,100-1000合并一次
合并完了就能播放了,如果不满意还可以改一下视频格式

如有问题可以私聊我~~

你可能感兴趣的:(python,python)