思路
-
视频播放地址提取
直接解析一下原网页的源文件,利用正则就可以得到所有视频的播放地址,下面的代码以微信公共平台python教程的播放地址为例。
-
视频链接提取
这里利用了飞驴视频下载API进行视频链接提取,按照API的格式填写相关参数就ok了
-
视频下载并保存
使用urllib.urlretrieve函数保存视频就可以了
源代码
源代码贴出来,大家相互学习一下。代码比较简单,是按照上面的思路一步步做的,这里就不详细解释了
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
import re
import base64
import os
#下载微信-python教学视频主函数
def down_weixin_python(url):
#获取一个页面下的所有视频播放链接
html = urllib.urlopen(url).read().decode('gbk').encode('utf-8')
pattern = re.compile(r'><ashref="(.*?)"stitle="(.*?)"')
down_link = pattern.findall(html)
print ("本页面共有" + str(len(down_link)) + "个视频" )
i = 1
for each_link in down_link:
#获取每个视频的下载地址
api_prefix = each_link[0].replace('//','##')
api_prefix = base64.b64encode(api_prefix)
api_head = 'http://api.flvxz.com/url/' + api_prefix + '/ftype/flv'
#解析出视频的真实下载地址
page = urllib.urlopen(api_head).read()
link_pattern = re.compile(r'<file><furl><![CDATA[(.*?)]]></furl><ftype>flv</ftype>')
video_link = link_pattern.findall(page)
print ("正在下载第" + str(i) + "个视频...")
down_video(video_link, each_link[1])
i = i + 1
#显示下载进度
def Schedule(a, b, c):
'''
a:已经下载的数据块
b:数据块的大小
c:远程文件的大小
'''
per = 100.0 * a * b / c
if per > 100:
per = 100
print '%.2f%%' % per
#下载文件
def down_video(video_url, file_name):
path = unicode(file_name, 'utf-8')
if os.path.exists(path):
pass
else:
os.mkdir(path)
file_name = unicode(file_name, 'utf-8')
if len(video_url) > 1:
j = 0
for each_link in video_url:
save_name = path + '\' + file_name + '-' + str(j) + '.f4v'
if os.path.isfile(save_name):
pass
else:
urllib.urlretrieve(each_link, save_name, Schedule)
j = j + 1
else:
save_name = path + '\' + file_name + '.f4v'
if os.path.isfile(save_name):
pass
else:
urllib.urlretrieve(video_url[0], save_name, Schedule)
url = ['http://v.pps.tv/11786793?page=1', 'http://v.pps.tv/11786793?page=2']
for each_link in url:
down_weixin_python(each_link)
个人原创,转载请注明出处!