最近妹子需要从场库网下载视频,研究了研究发现代码实现挺简单,本着初学者就要多动手的态度做了个小脚本,记录下来等以后入门儿了回头看看代码稚嫩的地方
场库网:高品质短片分享平台
(网址:https://www.vmovier.com/)
封装程序:
个人网站下载
(网址:http://123.206.72.236:8080/)
封装加壳的程序会让杀毒软件报毒
import urllib.request as http
import re
import requests
def run():
#电影名计数
num=1
while True:
try:
#输入网址并解析源码
source_code=str(http.urlopen(input('输入网址: ')).read())
#判断是否为优酷源并分别寻找vtom的url
vtom_url=get_vtom_url(source_code)
#尝试解析高清url
movie_url=fhd_movie(vtom_url)
#高清url解析失败则解析标清url
if '.mp4'!=movie_url[-4]+movie_url[-3]+movie_url[-2]+movie_url[-1]:
print('高清url解析失败,尝试解析标清url')
movie_url=hd_movie(vtom_url)
else:
print('高清视频源解析成功,视频url: ')
print('\n'+movie_url+'\n')
#下载视频
input('按"回车"键下载视频')
name='movie('+str(num)+').mp4'
download_movie(movie_url,name)
input('\n按"回车"键继续下载其他电影\n')
num+=1
except Exception as e:
print('程序发生错误,错误信息:')
print(e)
input('按"回车"退出程序')
break
def get_vtom_url(source_code):
'''判断是否为优酷源并分别寻找vtom的url'''
if 'youkuplayer-' in source_code:
vtom_url_end=re.findall(r"vtom_vid=\\'(.*?)\\'",source_code)[0]
vtom_url='https://openapi-vtom.vmovier.com/video/'+vtom_url_end
else:
chip=re.findall("\"p00b204e980\"(.*?)</iframe>",source_code)[0]
vtom_url=re.findall(r"src=\\'(.*?)\\'>",chip)[0]
print('网页解析成功,正在解析高清视频源')
return(vtom_url)
def fhd_movie(vtom_url):
'''解析高清url'''
vtom_source_code=str(http.urlopen(vtom_url).read())
body=re.findall("mp4-FHD(.*?)https_url",vtom_source_code)
if body:
movie_url=re.findall('"url":"(.*?)","',body[0])[0].replace('\\','')
else:
movie_url='aaaa'
return(movie_url)
def hd_movie(vtom_url):
'''解析标清url'''
vtom_source_code=str(http.urlopen(vtom_url).read())
body=re.findall("<body>(.*?)style=",vtom_source_code)[0]
movie_url='https:'+re.findall('href="(.*?)"',body)[0]
print('标清视频源解析成功,视频url: ')
print('\n'+movie_url+'\n')
return(movie_url)
def download_movie(movie_url,name):
'''分段下载视频'''
num=0
r=requests.get(movie_url,stream=True)
with open(name,"wb") as movie:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
movie.write(chunk)
num+=1
print('正在下载视频,请勿关闭程序! '+str(num))
print('下载完成!请检查该程序所在的文件夹!')
print('注意!!!请重命名已下载的电影后再下载新电影!!!')
run()