2023爬虫学习笔记 -- 通过协程下载m3u8视频
Posted web安全工具库
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2023爬虫学习笔记 -- 通过协程下载m3u8视频相关的知识,希望对你有一定的参考价值。
一、下载视频的时候是耗时操作,所以将下载视频的代码写到回调函数里面
1、创建协程访问网站,返回读取的内容及单条视频的下载地址
asyncdef 访问网站(url):asyncwith aiohttp.ClientSession() as 协程请求:
asyncwithawait 协程请求.get(url=url,headers=头) as 响应内容:
视频内容=await 响应内容.read()
return [视频内容,url]
print(url)
2、将内容保存下载
def 下载视频(视频):
返回列表内容=视频.result()
视频具体内容=返回列表内容[0]
视频地址=返回列表内容[1]
视频名字 = 视频地址.split('/')[-1]
保存路径 = 文件夹 + '/' + 视频名字
with open(保存路径, 'wb') as fp:
fp.write(视频具体内容)
print(视频名字)
3、通过事件挂接协程任务
事件循环=asyncio.new_event_loop()
asyncio.set_event_loop(事件循环)
任务列表=[]
for 网址 in 切片列表:
网站对象=访问网站(网址)
任务=asyncio.ensure_future(网站对象,loop=事件循环)
任务.add_done_callback(下载视频)
任务列表.append(任务)
事件循环.run_until_complete(asyncio.wait(任务列表))
二、协程下载源码
文件夹 = '片段'ifnot os.path.exists(文件夹):
os.mkdir(文件夹)
m3u8地址="https://woXXXXX.com:65/20220425/vsfbnBKc/index.m3u8"
头=
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
m3u8内容=requests.get(url=m3u8地址,headers=头).text
#print(m3u8内容)
切片列表=[]
for i in m3u8内容.split('\\n'):
ifnot i.startswith('#'):
切片=i
切片=urljoin(m3u8地址,切片)
切片列表.append(切片)
print(切片列表)
asyncdef 访问网站(url):asyncwith aiohttp.ClientSession() as 协程请求:
asyncwithawait 协程请求.get(url=url,headers=头) as 响应内容:
视频内容=await 响应内容.read()
return [视频内容,url]
print(url)
def 下载视频(视频):
返回列表内容=视频.result()
视频具体内容=返回列表内容[0]
视频地址=返回列表内容[1]
视频名字 = 视频地址.split('/')[-1]
保存路径 = 文件夹 + '/' + 视频名字
with open(保存路径, 'wb') as fp:
fp.write(视频具体内容)
print(视频名字)
事件循环=asyncio.new_event_loop()
asyncio.set_event_loop(事件循环)
任务列表=[]
for 网址 in 切片列表:
网站对象=访问网站(网址)
任务=asyncio.ensure_future(网站对象,loop=事件循环)
任务.add_done_callback(下载视频)
任务列表.append(任务)
事件循环.run_until_complete(asyncio.wait(任务列表))
以上是关于2023爬虫学习笔记 -- 通过协程下载m3u8视频的主要内容,如果未能解决你的问题,请参考以下文章