自动下载Tumblr某用户所有视频的脚本

linux脚本 waitig 6022℃ 百度已收录 0评论

此脚本可以自动下载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')

本文由【waitig】发表在等英博客
本文固定链接:自动下载Tumblr某用户所有视频的脚本
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (4)分享 (0)