使用python搞定<百度云盘> 视频限速/网页限制(我们就给他拿下来) 您所在的位置:网站首页 百度网盘限速1000倍怎么解除限制 使用python搞定<百度云盘> 视频限速/网页限制(我们就给他拿下来)

使用python搞定<百度云盘> 视频限速/网页限制(我们就给他拿下来)

2024-07-12 16:09| 来源: 网络整理| 查看: 265

 今天本来打算看个百度云盘的视频,在电脑上直接点开页面,看了才30秒,就要我保存到网盘才能继续看?????  这是什么操作

然后就保存到网盘。。。发现又是各种限制,配速也不行

既然不行,那我们就换一个办法(开始正题了哈)

首先第一步,找到他的m3u8文件,从接口里面捞了一下,还是很好找的

看下m3u8这个接口信息,是一个get请求, 但是直接拿出来请求不太好使,应该是在headers里面添加一些限制了(感兴趣的小伙伴可以去找下headers里面的内容,和api的参数拼接)

 

 

在这里我就不找api拼接规则和headers里面的限制了,感兴趣的朋友可以自己研究下

 直接把m3u8里面的文件全部复制到本地,而且m3u8也没有做加密,嘿嘿嘿

现在m3u8已经有了 我们就开始往下拉数据

我这里写了两种办法,我们先来看第一种,用过requests去挨个的请求m3u8里面的视频链接,并且进行保存,好使是好使,但是效率很慢,约700个的视频,需要下载十来分钟

import requests   # 百度云.m3u8 就是我们刚才保存在本地的m3u8文件 with open("m3u8/百度云.m3u8", mode='r', encoding='utf-8') as f: for line in f: line = line.strip() # 去除空格,空白,换行符 if line.startswith("#"): # 如果是以# 号开头,直接过滤掉 continue # 下载视频片段 resp = requests.get(line) f = open(f"百度云/{n}.ts", mode='wb') f.write(resp.content) resp.close() print(f"{n}完成") n += 1

来看下第二种办法,通过协程的方式进行下载,大概要下载700个小视频,用协程的办法2分钟就搞定了

import aiohttp import asyncio import aiofiles n = 1  # 传入m3u8里面的视频的url链接和保存的本地的名称 async def save_local(url, title): async with aiohttp.ClientSession() as session: async with session.get(url) as response: print(response.headers['Content-length']) if int(response.headers['Content-length']) < 1: asyncio.create_task(save_local(url, str(title))) else: async with aiofiles. open(f"百度云2/{title}.ts", mode='wb') as f: await f.write(await response.content.read()) print(f"{title}--完成") # 读取m3u8里面的内容 async def save_video(): tasks = [] i = 1 async with aiofiles.open("m3u8/百度云.m3u8", 'r') as rf: for line in await rf.readlines(): line = line.strip() # 去除空格,空白,换行符 if line.startswith("#"): # 如果是以# 号开头,直接过滤掉 continue print(line) print(line.split('/')[-1]) # task = asyncio.create_task(save_local(line, str(line.split('/')[-1]))) task = asyncio.create_task(save_local(line, str(i))) tasks.append(task) i += 1 # if i == 30: # break await asyncio.wait(tasks) if __name__ == '__main__': asyncio.run(save_video())

上面两种方式都可以保存下载,根据个人理解情况自行选择

下面就是保存下来所有的片段啦 

 

一共约700个小片段,下面就要把这些片段进行拼接,全部拼接在一起,最终形成一个完整的视频 # 直接读取写入,注意按照m3u8文件给出的顺序读取写入 import os # ts临时存储路径 tmp_path = os.path.join(os.getcwd(), "百度云") print(tmp_path) # 读取并解析ts链接 # f = open("index.m3u8", "r", encoding="utf-8") # m3u8 = f.readlines() # f.close() # url_list = [url.split("\n")[0] for url in m3u8 if "https" in url] with open('最终合并视频.ts', 'wb') as f2: for url in range(1, 546): # file_name = url.split("/")[-1] ts_path = os.path.join(tmp_path, f"{url}.ts") f1 = open(ts_path, "rb") data = f1.read() f1.close() f2.write(data) os.remove(os.path.join(tmp_path, f"{url}.ts")) f2.close()



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有