此脚本可以自动下载Tumblr某用户博客的所有视频资源并保存到本地,只需输入作者主页链接即可(http://xxx.tumblr.com) ,支持单个链接及批量链接。
会在目录下生成下载链接的文件,您可以将其粘贴到迅雷当中,使用迅雷下载,速度更快。
你要问tumblr是啥,懂的自然懂,哈哈
使用格式:
python .\TumblrModel.py -u'http://xxx.tumblr.com' 0 --搜集http://xxx.tumblr.com的所有视频,但不将文件保存到本地 python .\TumblrModel.py -u'http://xxx.tumblr.com' 1 --下载http://xxx.tumblr.com的所有视频,并且将文件保存到本地 python .\TumblrModel.py -f'filename' 1 --下载filename中所有的链接中的所有视频,并且将文件保存到本地
-u后面加作者主页链接地址 0或1代表是否将内容保存到本地。
因为tumblr在内地访问网络不是很稳定,所以加入了是否保存的选项。
无论是否保存,都会在./xxx/video/下生成一个url文件,里面包含了爬取到的所有视频的下载地址,你可以将这些地址粘贴到迅雷当中下载,速度更快~
下载方式默认使用urllib库,还可以选择使用request库和wget库,将代码中相关注释去掉即可。
现在只支持下载视频,图片的下载功能还没有加入,后续会加入。
github地址:https://github.com/waitig/TumblrVideo
代码如下(写的比较仓卒,代码比较乱,而且没有加注释,大家凑合着看哈):)
20160503更新:
由于视频下载器上线,代码只保留关键代码,其余已删除
TumblrModel.py
# -*- coding: utf-8 -*- #-------------------------------------- #Author:waitig.com #Date:2016-04-01 #Desc:自动下载Tumblr用户所有视频的脚本 #--------------------------------------
#-----------------关键代码--------------
def get_video_urls(self,text): video_urls=re.findall('(?P<video_urls>https://www.tumblr.com/video/[^/]*?/\d+/\d+/)',text) return video_urls def get_video_files(self,url): url=url.strip('/') print 'Start to deal video url : '+url #----------------------------------------------------------- self.set_headers(url) self.headers={ 'Host': 'www.tumblr.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive' } Reslut=self.se.get(url,headers=self.headers) sourceUrl='' sourceUrls=re.findall('src=\"(?P<video_urls>https://www.tumblr.com/video_file/\d+/[^\"]*?)\"',Reslut.text) if(sourceUrls!=[]): sourceUrl=sourceUrls[0] print 'Source url : '+sourceUrl SourceType='' SourceTypes=re.findall('type=\"video/(?P<vide_type>[^\"]*?)\"',Reslut.text) if(SourceTypes!=[]): SourceType=SourceTypes[0] sourceUrl=re.sub('https://www.tumblr.com/video_file/\d+/','',sourceUrl) sourceUrl=sourceUrl.replace('/','_') sourceUrl='https://vt.tumblr.com/'+sourceUrl trueUrl=sourceUrl+'.'+SourceType return trueUrl def deal_blogs_page(self,url): print 'Start to deal url : '+url self.set_headers(url) Result=self.se.get(url,headers=self.headers) text=Result.text img_urls=self.get_img_urls(text) video_urls=self.get_video_urls(text) for img in img_urls: self.save_img_file(img,self.img_path) for videoUrl in video_urls: self.save_video_file(videoUrl,self.video_path) nextUrls=re.findall('href=\"/page/(?P<next>\d+)\"',text) if(nextUrls!=[]): nextPage=str(self.curPage+1) if(nextPage in nextUrls): nextUrl=self.index_url+'page/'+nextPage self.curPage+=1 self.deal_blogs_page(nextUrl) else: return def deal_save_path(self): userNames=re.findall('http://(?P<PATH>[^\.]*?)\.tumblr\.com/',self.index_url) if(userNames!=[]): userName=userNames[0] self.img_path=userName+'/img/' self.video_path=userName+'/videos/' if(os.path.exists(self.video_path)==False): os.makedirs(self.video_path) self.video_url_file=open(self.video_path+'video_url','w')
手 机 在 线 看 黄 8 W W X . c o m/n/n手 机 在 线 看 黄 8 W W X . c o m
分享图片
分享图片
现在不能用了吗?怎么都是一个地址?
@其淡如水 可能是被墙的原因,等我加个有代理的版本试试
Start to download video file : https://vt.tumblr.com/tumblr_nvakewRUOu1uatgt2.mp4
Start to deal video url : https://www.tumblr.com/video/miniwlof/134122324910/700
Source url : https://www.tumblr.com/video_file/134122324910/tumblr_ndft7ajWJF1t1ckqm/480
Start to download video file : https://vt.tumblr.com/tumblr_ndft7ajWJF1t1ckqm_480.mp4
Start to deal video url : https://www.tumblr.com/video/miniwlof/128788510780/700
Source url : https://www.tumblr.com/video_file/128788510780/tumblr_nqt47jcqGK1uq7q18
Start to download video file : https://vt.tumblr.com/tumblr_nqt47jcqGK1uq7q18.mp4
Start to deal video url : https://www.tumblr.com/video/miniwlof/128788003275/700
Source url : https://www.tumblr.com/video_file/128788003275/tumblr_nnybu0n3pk1upn3kp
Start to download video file : https://vt.tumblr.com/tumblr_nnybu0n3pk1upn3kp.mp4
bogon:~ GaoHongxing$ python /Users/GaoHongxing/Downloads/TumblrVideo-master/TumblrModel.py -u’http://miniwlof.tumblr.com’ 1
Start to deal url : http://miniwlof.tumblr.com/
Start to deal video url : https://www.tumblr.com/video/miniwlof/140895518360/700
Source url : https://www.tumblr.com/video_file/140895518360/tumblr_nr6bklQ4vH1upugcq
Start to download video file : https://vt.tumblr.com/tumblr_nr6bklQ4vH1upugcq.mp4
Downloadding… method=urllib2
终于调通了,哈哈~~
这个输入格式比较容易出错,参数长度为3,-u和url之间没有空格
@ghxbob 这个最好改下代码,使用wget包下载,urllib下载不是很稳定,而且国内网络也不是很好。最好的方式是把视频链接贴到迅雷里下载,速度很快
@waitig 是的,用迅雷快很多,代码下载没试过,太慢了,就放弃了,改为0