[原创]在线视频下载(Using Python / Bash / C / Reguar Expressions)
Windows上下载在线视频不是很难, 可以安装爱酷等对应在线视频(这里是优酷)的官方下载工具, 更通用地, 可以使用硕鼠下载, 这个软件我没用过, 但我需要使用硕鼠官方网站http://www.flvcd.com(支持70多个在线视频网站的解析, 好强大的说)的视频解析作为代理将某个在线视频播放地址解析成对应的下载地址, 我使用Python和正则表达式进行抓取我想要的部分(下载地址以及视频标题)并且下载给定视频地址的视频, 这个脚本如下:
#!/usr/bin/env python
import sys
def output(s):
sys.stderr.write(s + "\n") # output progress to stderr(Notice that it is NOT for outputing actual error message,
# I use stderr just to catch stdout easily(the same as curl) so i can merge these flvs later)
argc = len(sys.argv)
if argc == 2:
format = 'super'
elif argc == 3:
format = sys.argv
else:
output("Usage: %s videourl " % sys.argv)
output(" e.g.")
output(" %s http://v.youku.com/v_show/id_XMzMzMjE0MjE2.html super" % sys.argv)
exit(1)
videourl = sys.argv
import urllib2
import urllib
url = 'http://www.flvcd.com/parse.php?kw=' + urllib.quote(videourl)+ '&format=' + format
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'
req = urllib2.Request(url)
# add some headers to fake Chrome Browser(if we don't do so, there will be a problem when try to get tudou video)
req.add_header('host', 'www.flvcd.com')
req.add_header('Referer', 'http://www.flvcd.com')
req.add_header('User-Agent', user_agent)
req.add_header('Accept-Language', 'en-us,en;q=0.5')
req.add_header('Accept-Encoding', 'gzip, deflate')
req.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7')
# req.add_header('Keep-Alive', '115')
res = urllib2.urlopen(req)
html = res.read()
import re
pattern = re.compile('downloading Block %.2d of %.2d ...' % (k+1, count))
filename = (v.replace('"', '\\"').replace('/', '') + '.flv').encode('utf-8')
if (v.find('tudou.com') != -1):
opener.retrieve(v, filename)
else:
urllib.urlretrieve(v, filename)
# urlretrieve with custom header(s)
#req = urllib2.Request(v)
#req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11')
#f = open(v + '.flv', 'wb')
#f.write(urllib2.urlopen(req).read())
#f.close()
# urllib.urlretrieve(v, v + '.flv')
files.append(filename)
output('downloaded Block.%.2d completely
页:
[1]