①首先我们打开网站,按F12打开浏览器开发调试工具,点击Network,可以看到有很多ts文件:
②我们可以发现,这些ts文件的名字是有规律的,随着视频的播放获取到的ts文件,末尾数字由小到大。直接把视频的进度条拖到最后,查看ts文件末尾数字最大为多大:
通过观察不难看出,ts文件的名字就只有三位在变,我这里是从1到721,没有数的位会用零来补位。
③点击一个ts文件,把Request URL后的复制下来。
④以下是代码:
import requests
import os
import time
from multiprocessing import Pool
def run(i):
shu = "%03d"%i #之前我们分析出这个是三位数,没有进位的用零补位
url = "https://2.mhbobo.com/20190727/QqLJZEwh/800kb/hls/OvNptudd7658" + shu + ".ts" #之前复制的url,把最要改变的位数删掉
print("开始下载:"+url)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"} #让自己伪装成浏览器
r = requests.get(url, headers = headers)
name = url[-6:] #设置保存的名字,我用这个文件原本的名字的后6位做名字(这6位中包括了.ts)
with open(name,'wb') as f: #打开文件以字节写入方式写入
f.write(r.content)
def main():
os.chdir('E:\\爬视频') #选择你要保存到的目录
pool = Pool(10) #multiprocessing库下的一个函数,设置进程池最大进程数量
for i in range(1,722): #之前我们分析出的数是多少到多少,就把范围设定到那之内
pool.apply_async(run, (i,)) #非阻塞异步,不用等待子进程执行完毕, 主进程会继续执行,run进入的函数名,i是给这个函数传的参数
pool.close() #不接受任何新进程
pool.join() #等待所有进程完成然后退出
if __name__ == '__main__':
main()
运行程序效果:
⑤在我设置的文件夹里,找到了相应的ts文件:
我们打开ts文件可以发现,每个ts文件只有短短几秒,这显然不是我们想要的,
这时我们可以在网上下载一个ts合并软件工具:
打开软件,在配置里可以设置合并后视频保存路径,点击打开选择ts文件所在的文件夹,ctrl+A选择并打开所有文件,再点击合并(注意此时ts文件不要是被其他播放器打开的状态):
大功告成,然后在保存的路径下就可以找到我们想要的视频了: