python爬取m3u8连接的视频
本文为大家分享了python爬取m3u8连接的视频方法,供大家参考,具体内容如下
要求:输入m3u8所在url,且ts视频与其在同一路径下
#!/usr/bin/env/python
#_*_coding:utf-8_*_
#Data:17-10-08
#Auther:苏莫
#Link:http://blog.csdn.net/lingluofengzang
#PythonVersion:python2.7
#filename:download_movie.py
importos
importsys
importrequests
reload(sys)
sys.setdefaultencoding('utf-8')
#功能:爬取m3u8格式的视频
#检查存储路径是否正常
defcheck_path(_path):
#判断存储路径是否存在
ifos.path.isdir(_path)oros.path.isabs(_path):
#判断存储路径是否为空
ifnotos.listdir(_path):
return_path
else:
printu'>>>[-]目标文件不为空,将清空目标文件,是否更换路径?'
flag=raw_input('>>>[*]Yes:1No:2\n>>>[+][2]')
try:
ifflag=='1':
_path=raw_input(unicode('>>>[+]请输入目标文件路径。\n>>>[+]').encode('gbk'))
check_path(_path)
else:
#清空存储路径
os.system('rd/S/Q'+_path)
os.system('mkdir'+_path)
return_path
exceptExceptionase:
printe
exit(0)
else:
os.makedirs(_path)
return_path
#获取ts视频的爬取位置
defget_url(_url,_path):
all_url=_url.split('/')
url_pre='/'.join(all_url[:-1])+'/'
url_next=all_url[-1]
os.chdir(_path)
#获取m3u8文件
m3u8_txt=requests.get(_url,headers={'Connection':'close'})
withopen(url_next,'wb')asm3u8_content:
m3u8_content.write(m3u8_txt.content)
#提取ts视频的url
movies_url=[]
_urls=open(url_next,'rb')
forlinein_urls.readlines():
if'.ts'inline:
movies_url.append(url_pre+line[:-1])
else:
continue
_urls.close()
returnmovies_url
#爬取ts视频
defdownload_movie(movie_url,_path):
os.chdir(_path)
print'>>>[+]downloading...'
print'-'*60
error_get=[]
for_urlinmovie_url:
#ts视频的名称
movie_name=_url.split('/')[-1][-6:]
try:
#'Connection':'close'防止请求端口占用
#timeout=30防止请求时间超长连接
movie=requests.get(_url,headers={'Connection':'close'},timeout=60)
withopen(movie_name,'wb')asmovie_content:
movie_content.writelines(movie)
print'>>>[+]File'+movie_name+'done'
#捕获异常,记录失败请求
except:
error_get.append(_url)
continue
#如果没有不成功的请求就结束
iferror_get:
printu'共有%d个请求失败'%len(file_list)
print'-'*60
download_movie(error_get,_path)
else:
print'>>>[+]Downloadsuccessfully!!!'
if__name__=='__main__':
try:
_url=raw_input(unicode('>>>[+]请输入指定的[.m3u8]目标URL。\n>>>[+]').encode('gbk'))
_path=raw_input(unicode('>>>[+]请输入存储目标文件路径。\n>>>[+]').encode('gbk'))
storage_path=check_path(_path)
movie_url=get_url(_url,storage_path)
download_movie(movie_url,storage_path)
exceptExceptionase:
printe
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。