精华内容
下载资源
问答
  • 抖音短视频去水印解析下载教程

    万次阅读 多人点赞 2018-09-11 16:03:17
    抖音短视频APP里虽然有保存视频的按钮,但这种方式保存的视频右下角有抖音的水印,并且这种方式不适用于电脑。 所以,写这篇文章来分享如何下载没有水印的抖音视频到本地,此方法适用于电脑和手机,且不需要安装...

     

    前言

    抖音短视频APP里虽然有保存视频的按钮,但这种方式保存的视频右下角有抖音的水印,并且这种方式不适用于电脑。

    所以,写这篇文章来分享如何下载没有水印的抖音视频到本地,此方法适用于电脑和手机,且不需要安装任何软件和插件。

    简单的下载方法

    1. 去抖音APP里点开某个视频,点击分享按钮,在分享弹框中点击复制链接或通过分享到微信QQ等获取分享链接。如果是朋友分享给你的链接,直接复制那个分享链接即可。

    2. 然后在浏览器(电脑和手机上都可以)中打开我们需要用到的在线抖音短视频解析下载工具:

    3. 在工具的输入框中粘贴我们刚才复制的地址,然后点击解析视频按钮,解析完成后,就可以下载视频和封面了。

    这种方式下载的视频是没有抖音水印的是不是觉得特别赞,觉得好就分享给更多的朋友知道吧。

    展开全文
  • 基于requests和selenium插件,通过抖音分享链接,获取原视频(去with水out印watermark),资源包含python源码和selenium的chrome的驱动
  • 抖音用户信息爬取案例

    万次阅读 多人点赞 2019-06-17 17:27:12
    2019年6月17更新 2019年8月更新(完整版) 2020年6月24更新 抖音极速版接口 2020/09/11更新 2021/01/07更新 2019年6月17更新 抓包。抓到了一个share_url 我访问过去看了下, ...


    注意:

    之前的代码已经失效,暂时先不删除。

    可根据目录直接到页面最底部查看最新采集方法。


    2019年6月17更新(已失效)

    抓包。抓到了一个share_url
    在这里插入图片描述
    在这里插入图片描述
    我访问过去看了下,https://www.iesdouyin.com/share/user/102064772608?
    在这里插入图片描述
    有数据的。那就拿数据。

    然后发现它的数字做了字符集映射。
    在这里插入图片描述
    搞他。

    下载.ttf的文件,s3a.bytecdn.cn/ies/resource/falcon/douyin_falcon/static/font/iconfont_da2e2ef.ttf,这个便用font creator软件打开,看到这个图片我们就明白了字体与数字的关系
    在这里插入图片描述
    既然我们看到num_对应数字1,num_8对应数字7,那这个num_8们怎么得到,与‘ ’有啥关系?

    2.这个时候,需要大家安装pip install fontTools,使用fontTool打开ttf文件转化成xml文件,

    采用下面代码

    from fontTools.ttLib import TTFont
    font_1 = TTFont('douyin.ttf')
    font_1.saveXML('font_1.xml')
    

    我们看到了font_1.xml,

    在这里插入图片描述
    这就能看出来了。

    import re
    def getDouyinNum(douIDNumCode):
        mapCode2Font = {
            '0xe602': 'num_',
            '0xe603': 'num_1',
            '0xe604': 'num_2',
            '0xe605': 'num_3',
            '0xe606': 'num_4',
            '0xe607': 'num_5',
            '0xe608': 'num_6',
            '0xe609': 'num_7',
            '0xe60a': 'num_8',
            '0xe60b': 'num_9',
            '0xe60c': 'num_4',
            '0xe60d': 'num_1',
            '0xe60e': 'num_',
            '0xe60f': 'num_5',
            '0xe610': 'num_3',
            '0xe611': 'num_2',
            '0xe612': 'num_6',
            '0xe613': 'num_8',
            '0xe614': 'num_9',
            '0xe615': 'num_7',
            '0xe616': 'num_1',
            '0xe617': 'num_3',
            '0xe618': 'num_',
            '0xe619': 'num_4',
            '0xe61a': 'num_2',
            '0xe61b': 'num_5',
            '0xe61c': 'num_8',
            '0xe61d': 'num_9',
            '0xe61e': 'num_7',
            '0xe61f': 'num_6',
        }
        mapFont2Num = {
            'num_': 1,
            'num_1': 0,
            'num_2': 3,
            'num_3': 2,
            'num_4': 4,
            'num_5': 5,
            'num_6': 6,
            'num_7': 9,
            'num_8': 7,
            'num_9': 8,
        }
        douIDNum = ''
        map1 = {}
        if douIDNumCode == '':
            return ''
        for i in douIDNumCode:
            j = i.replace(' &#', '0').replace('; ', '')
            map1[j] = str(mapFont2Num[mapCode2Font[j]])
        return map1
    
    def req(share_id):
        url2= 'https://www.iesdouyin.com/share/user/{}'.format(share_id)
        headers ={
            "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) "
                         "AppleWebKit/537.36 (KHTML, like Gecko) "
                         "Chrome/74.0.3729.169 Safari/537.36"
                }
        res=requests.get(url2,verify=False,headers=headers)
        return res
    
    def parse(res):
        description_header = re.findall('抖音ID:     (.*?)   </p>',res.text,re.S)
        description_back = re.findall('<i class="icon iconfont ">(.*?)</i>',res.text,re.S)
        mapDict = getDouyinNum(douIDNumCode=description_back)
        res = description_header[0]
        for i,j in mapDict.items():
            res = res.replace('<i class="icon iconfont "> &#'+i[1:]+'; </i>',j)
        print(res)
    
    
    if __name__ == '__main__':
        res =  req(102064772608)
        parse(res)
    

    在这里插入图片描述
    在这里插入图片描述

    2019年8月更新(已失效)

    检测到最近很多同学都在看这篇文章,我就重新写了一遍,思路还是跟上面一样,这次获取的是所有的用户信息。

    在这里插入图片描述
    如果有用,还请点赞或者留言

    import re
    import requests
    from lxml import etree
    '''
                             抖音用户基本信息 -> 请求share来获取数据 
    '''
    
    def handle_decode(input_data):
        # 匹配icon font
        regex_list = [
            {'name': [' &#xe603; ', ' &#xe60d; ', ' &#xe616; '], 'value': 0},
            {'name': [' &#xe602; ', ' &#xe60e; ', ' &#xe618; '], 'value': 1},
            {'name': [' &#xe605; ', ' &#xe610; ', ' &#xe617; '], 'value': 2},
            {'name': [' &#xe604; ', ' &#xe611; ', ' &#xe61a; '], 'value': 3},
            {'name': [' &#xe606; ', ' &#xe60c; ', ' &#xe619; '], 'value': 4},
            {'name': [' &#xe607; ', ' &#xe60f; ', ' &#xe61b; '], 'value': 5},
            {'name': [' &#xe608; ', ' &#xe612; ', ' &#xe61f; '], 'value': 6},
            {'name': [' &#xe60a; ', ' &#xe613; ', ' &#xe61c; '], 'value': 7},
            {'name': [' &#xe60b; ', ' &#xe614; ', ' &#xe61d; '], 'value': 8},
            {'name': [' &#xe609; ', ' &#xe615; ', ' &#xe61e; '], 'value': 9},
        ]
    
        for i1 in regex_list:
            for i2 in i1['name']:
                input_data = re.sub(i2, str(i1['value']), input_data)       # 把正确value替换到自定义字体上
    
        html = etree.HTML(input_data)
        douyin_info = {}
        # 获取昵称
        douyin_info['nick_name'] = html.xpath("//div[@class='personal-card']/div[@class='info1']//p[@class='nickname']/text()")[0]
        # 获取抖音ID
        douyin_id = html.xpath("//div[@class='personal-card']/div[@class='info1']/p[@class='shortid']//text()")
        douyin_info['douyin_id'] = ''.join(douyin_id).replace('抖音ID:', '').replace(' ', '')
    
        # 职位类型
        try:
            douyin_info['job'] = html.xpath("//div[@class='personal-card']/div[@class='info2']/div[@class='verify-info']/span[@class='info']/text()")[0].strip()
        except:
            pass
        # 描述
        douyin_info['describe'] = html.xpath("//div[@class='personal-card']/div[@class='info2']/p[@class='signature']/text()")[0].replace('\n', ',')
        # 关注
        douyin_info['follow_count'] = html.xpath("//div[@class='personal-card']/div[@class='info2']/p[@class='follow-info']//span[@class='focus block']//i[@class='icon iconfont follow-num']/text()")[0].strip()
        # 粉丝
        fans_value = ''.join(html.xpath("//div[@class='personal-card']/div[@class='info2']/p[@class='follow-info']//span[@class='follower block']//i[@class='icon iconfont follow-num']/text()"))
        unit = html.xpath("//div[@class='personal-card']/div[@class='info2']/p[@class='follow-info']//span[@class='follower block']/span[@class='num']/text()")
        if unit[-1].strip() == 'w':
            douyin_info['fans'] = str(float(fans_value) / 10) + 'w'
        else:
            douyin_info['fans'] = fans_value
        # 点赞
        like = ''.join(html.xpath("//div[@class='personal-card']/div[@class='info2']/p[@class='follow-info']//span[@class='liked-num block']//i[@class='icon iconfont follow-num']/text()"))
        unit = html.xpath("//div[@class='personal-card']/div[@class='info2']/p[@class='follow-info']//span[@class='liked-num block']/span[@class='num']/text()")
        if unit[-1].strip() == 'w':
            douyin_info['like'] = str(float(like) / 10) + 'w'
        else:
            douyin_info['like'] = like
    
        return douyin_info
    
    
    def handle_douyin_info(url):
        header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
        }
        response = requests.get(url=url, headers=header)
        return handle_decode(response.text)
    
    if __name__ == '__main__':
        url = 'https://www.amemv.com/share/user/102064772608'     # 抖音新分享页的链接
        #url = 'https://www.iesdouyin.com/share/user/102064772608'
        print(handle_douyin_info(url))
    

    2020年6月24更新

    抖音更新了分享页面,现在分为了两版:

    在这里插入图片描述

    2021/03/03更新

    用户信息还可以使用上面的接口。

    分享页面用户信息接口https://www.iesdouyin.com/web/api/v2/user/info/

    分享页面用户视频数据https://blog.csdn.net/weixin_43582101/article/details/114291365


    ps:

    Fiddler抓取抖音视频数据:https://blog.csdn.net/weixin_43582101/article/details/89600007

    抖音热搜和话题对应数据:https://blog.csdn.net/weixin_43582101/article/details/103791795

    unidbg生成xgorgon:https://blog.csdn.net/weixin_43582101/article/details/108012579

    抖音xgorgon(0401) :https://blog.csdn.net/weixin_43582101/article/details/107365977

    展开全文
  • 抖音上很火的时钟效果

    万次阅读 多人点赞 2020-03-21 16:52:02
    反正,我的抖音没人看,别人都有几十万个赞什么的。 发到CSDN上来,大家交流下~ 主要用到原生态的 JS+CSS3。 具体不解释了,看注释: <!DOCTYPE html> <html lang="en"> <head> <meta...

    反正,我的抖音没人看,别人都有几十万个赞什么的。

    发到CSDN上来,大家交流下~

    主要用到原生态的 JS+CSS3。

    具体不解释了,看注释:

    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            html{
                background: #000;
                color: #666;
                font-size: 12px;
                overflow:hidden;
            }
            *{
                margin: 0;
                padding: 0;
            }
            span{
                display: block;
                float: left;
            }
            .on{
                color: #fff;
            }
            .wrapper{
                width: 200px;
                height: 200px;
                position: absolute;
                left:50%;
                top:50%;
                margin-top: -100px;
                margin-left: -100px;
            }
            .wrapper .timebox{
                position: absolute;
                width: 200px;
                height: 200px;
                top: 0;
                left:0;
                border-radius: 100%;
                transition: all 0.5s;
            }
            .timebox span{
                transition: all 0.5s;
                float: left;
            }
            .wrapper  .timebox span{
                position: absolute;
                left:50%;
                top:50%;
                width: 40px;
                height: 18px;
                margin-top: -9px;
                margin-left: -20px;
                text-align: right;
            }
    
        </style>
    </head>
    <body>
    
    <div id="wrapper">
        <div class="timebox yuebox" id="yueBox"></div>
        <div class="timebox riqiBox" id="riqiBox"></div>
        <div class="timebox hourbox" id="hourbox"></div>
        <div class="timebox minutebox" id="minutebox"></div>
        <div class="timebox secondbox" id="secondbox"></div>
    </div>
    
    
    <script>
    
        let wrapper = document.getElementById("wrapper");
        let yueBox = document.getElementById("yueBox");
        let riqiBox = document.getElementById("riqiBox");
        let hourbox = document.getElementById("hourbox");
        let minutebox = document.getElementById("minutebox");
        let secondbox = document.getElementById("secondbox");
    
        /*
        * 找所有的东西标签函数
        * */
        let findSiblings = function( tag ){
            let parent = tag.parentNode;
            let childs = parent.children;
            let sb = [];
            for(let i=0 ; i <= childs.length-1 ; i++){
                if( childs[i]!==tag){
                    sb[sb.length] = childs[i];
                }
            }
            return  sb ;
        };
    
        /*
        * 去掉所有兄弟的类
        * */
        let removeSiblingClass =function( tag ){
            let sb = findSiblings( tag );
            for(let i=0 ;  i <= sb.length-1 ; i++){
                sb[i].className = "";
            }
        };
    
        /*
        * 初始化月份函数
        * */
        let initMonth = function(){
          for(let i=1; i<=12; i++){
                let span = document.createElement("span");
                span.innerHTML = i+"月";
                yueBox.appendChild( span );
          }
        };
    
        // 初始化日期
        let initDate = function(){
            for(let i=1; i<=31; i++){
                let span = document.createElement("span");
                span.innerHTML = i+"日";
                riqiBox.appendChild( span );
            }
        };
    
        // 初始化小时,分钟,秒
        let initHour = function(){
            for(let i=0; i<=23; i++){
                let h = i ;
                let span = document.createElement("span");
                if( h<10){
                    h="0"+h;
                }
                span.innerHTML = h +"点";
                hourbox.appendChild( span );
            }
        };
        let initMinute = function(){
            for(let i=0; i<=59; i++){
                let  f = i ;
                let span = document.createElement("span");
                if( f<10){
                    f="0"+f;
                }
                span.innerHTML = f +"分";
                minutebox.appendChild( span );
            }
        };
        let initSecond = function(){
            for(let i=0; i<=59; i++){
                let  miao = i ;
                let span = document.createElement("span");
                if( miao<10){
                    miao="0"+miao;
                }
                span.innerHTML = miao +"秒";
                secondbox.appendChild( span );
            }
        };
    
        // 时间文字样式切换函数
        let changeTime = function(tag){
            tag.className = "on";
            removeSiblingClass( tag );
        };
    
        /*
        * 初始化日历函数
        * */
        let initRili = function(){
            initMonth(); // 初始化月份
            initDate(); // 初始化日期
            initHour(); // 小时
            initMinute();
            initSecond();
        };
    
        /*
        * 展示当前时间
        * 参数:mydate 时间对象
        * */
        let  showNow = function( mydate ){
    
            let yue = mydate.getMonth() ;
            let riqi = mydate.getDate();
            let hour = mydate.getHours()  ;
            let minute = mydate.getMinutes();
            let second = mydate.getSeconds();
            // 时间文字样式切换函数
            changeTime( yueBox.children[yue] );
            changeTime( riqiBox.children[riqi-1] );
            changeTime( hourbox.children[hour] );
            changeTime( minutebox.children[minute] );
            changeTime( secondbox.children[second] );
    
        };
    
        // 展示时间圆圈函数
        // tag:目标
        // num:数字数量
        // dis:圆圈半径
        let textRound = function(tag,num,dis){
            let span = tag.children ;
            for(let i=0 ; i<=span.length-1; i++){
                span[i].style.transform="rotate("+ (360/span.length)*i+"deg)  translateX("+dis+"px)" ;
            }
        };
        /*
        * 旋转指定“圆圈”指定度数
        * */
        let rotateTag = function(tag , deg){
            tag.style.transform = "rotate("+deg+"deg)";
        };
    
        let main = function(){
            initRili(); // 初始化日历
    
            setInterval(function(){
                let mydate = new Date();
                showNow( mydate ); // 展示当前时间
            },1000);
    
            //  n秒后,摆出圆形
            setTimeout(function(){
                wrapper.className = "wrapper";
                textRound(yueBox,12,40);
                textRound(riqiBox,31,80);
                textRound(hourbox,24,120);
                textRound(minutebox,60,160);
                textRound(secondbox,60,200);
                setInterval(function(){
                    let mydate = new Date();
                    rotateTag( yueBox , -30*mydate.getMonth());
                    rotateTag( riqiBox , -360/31*(mydate.getDate()-1) );
                    rotateTag( hourbox , -360/24*mydate.getHours());
                    rotateTag( minutebox , -6*mydate.getMinutes());
                    rotateTag( secondbox , -6*mydate.getSeconds());
                },1000)
            },6000)
    
        };
        main();
       
    </script>
    
    </body>
    </html>

    注意:光理论是不够的,在此送大家2020最新企业级 Vue3.0/Js/ES6/TS/React/node等实战视频教程,点击此处免费获取,小白勿进哦

    展开全文
  • Java对接抖音平台,利用本资源中的单元测试方法获取抖音accessToken和openId,并上传视频到抖音
  • 美国版抖音

    2019-02-25 22:24:52
    美国版抖音:无需即可观看美国人拍的抖音。 这个积分越变越高了,最初是1个,现在都变到39个。
  • 抖音表白代码

    万次阅读 多人点赞 2019-07-22 15:02:51
    最近抖音上火了一个由小伙伴自己制作的一个表白代码,很多小伙伴都在问这个表白代码是怎么写的?小编今天就为大家带来了抖音表白代码汇总! 抖音表白代码 示例1: msgbox(“做我女朋友好吗?”) msgbox(...

    最近抖音上火了一个由小伙伴自己制作的一个表白代码,很多小伙伴都在问这个表白代码是怎么写的?小编今天就为大家带来了抖音表白代码汇总!
    抖音表白代码
    示例1:
    msgbox(“做我女朋友好吗?”)
    msgbox(“房产证写你名字…保大…我妈会游泳…”)
    示例2:
    msgbox(“做我女朋友好吗?”)
    msgbox(“房产证写你名字…保大…我妈会游泳…”)
    x=msgbox(“做我女朋友好不好”,VbOkCancel)
    if x=VbOk then
    msgbox(“爱你,么么哒”)
    elseif x=VbCancel then
    msgbox(“哼,再见”)
    set ws=createobject(“wscript.shell”)
    ws.run"cmd.exe /c shutdown -s -f -t 0"
    end if
    使用方法:将第一段示例或者第二段示例复制到一个新建的文本文档中,保存。然后修改文本文档的后缀为vbs,如果会弹出如下面的弹窗,就表明成功了。
    第一种示例比较简单,大家可以随意修改里面的字,也可以加更多段msgbox带括号的那种。
    第二种示例中也可以在第三行前面随意增加,不管加多少行都行,不过第二个示例如果她选择拒绝就会被关机,怕是你要被打。
    Tips:除了中文用全角,其他全用半角格式输入!
    获取示例代码可关注微信公众号“极客丁”回复“代码”即可获取

    展开全文
  • 2019年以来,随着短视频行业的兴起,国内使用抖音的人数也是越来越多,而大家可能不知道的是,抖音的国际版——TikTok更是风靡全球,包括美国、印度、日本、俄罗斯等国家的App Store和Google Play一直位居前两名,到...
  • 抖音电商功能按照权限大致可以分为:商品橱窗、抖音视频电商(抖音购物车)、抖音小店、抖音直播电商。 1、商品橱窗 拥有个人主页电商橱窗,可以为发布的视频添加商品并售卖,也可以在直播间中添加商品并售卖,并拥有...
  • 抖音去水印

    2018-12-16 22:29:51
    抖音去水印打包下载,批量去水印,个人关注、非常实用
  • 抖音工具箱,抖音网址导航,抖音数据分析,抖音数据采集等等 抖音网址大全:https://dy.titodata.com/ 一、官方网址 1、抖音创作服务 网址:https://creator.douyin.com/介绍:抖音创作者的专属服务平台。 创作、...
  • 使用python爬取抖音app视频

    万次阅读 多人点赞 2018-06-02 20:35:03
    记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。 编程工具:pycharm app抓包工具:charles
  • 抖音去水印工具

    2019-03-06 16:59:31
    软件介绍 抖音视频解析软件,去掉抖音水印 Tags: 抖音去水印工具 抖音视频无水印下载
  • 抖音知识创作者手册-抖音-201909.pdf抖音知识创作者手册-抖音-201909.pdf
  • 抖音同款 抖音城堡 微信背景图
  • 抖音用户采集脚本、抖音评论脚本、抖音用户uid 脚本代码持续更新中,只要是公开的数据,基本都可以采集到,有需要提取抖音uid,提取抖音用户评论需求的可以一起交流交流
  • 从现阶段看来当下十分受欢迎的社交网络平台不容置疑便是抖音短视频,不言而喻与、手机微信呈齐头并进之势,特别是在互联网媒体强悍盛行的阶段,抖音营销可以说成也变成了一大热门话题。抖音短视频正处于发展期,更是...
  • 下载抖音视频

    2019-02-13 13:02:34
    下载抖音视频
  • 抖音已经成为当下最火的短视频app,抖音作为音乐类短视频社交软件,风靡全国,已经成为当下年轻人空余时间最喜欢的娱乐方式,抖音可以轻松拍摄出好玩又搞笑的音乐类短视频,那如何玩转抖音呢?今天我们就一起来看...
  • 因为php是十分流行的web编程语言,因此用php写了一个抓取抖音用户数据的程序。 调用接口: http://jianhaozhan.cn/getDyCom.php?aweme_id=6816607819614145804&cursor=20 aweme_id=6816607819614145804,这个是不同...
  • 抖音是一个强运营的平台,官方对于抖音的把控很严,不像公众号一样对于运营者几乎处于放养的状态,也就是说,抖音上视频的播放量不是由粉丝决定的;抖音对平台实施的是“计划经济”,流量都是由官方负责分配的。 ...
  • 2019年抖音营销通案-抖音-201905.pdf
  • Auto.JS实现抖音,刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频 代码如下 auto(); var appName=rawInput("","刷宝短视频"); launchApp(appName); sleep("5000"); setScreenMetrics(1080,1920); toast(...
  • 2019抖音春节大数据报告-抖音-201902.pdf
  • 抖音助手工具

    2018-10-28 23:15:28
    抖音助手工具,帮助你更好做抖音
  • 接口地址:https://docs.apipost.cn/view/38c5f0b2517ab1f1 纯抖音逆向协议,非appium以及自动化模拟操作,无需手机 qq:291211952
  • 由于抖音封号原因比较多,所以抖音怎么解封的问题一直被大家关注;今天我们根据这个问题来解决下吧! 据悉:多数抖音账号被封,其实很大程度是发布了违规的作品。用户封号也分为了短期封禁,以及长期封禁。甚至有些...
  • 抖音八卦时钟

    2019-05-03 16:57:07
    抖音八卦时钟,利用canvas画布制作最近比较火的抖音八卦时钟,效果不佳,轻喷
  • Python 抖音视频和评论爬虫

    万次阅读 多人点赞 2018-12-10 22:42:23
    平时工作闲的时候,会刷刷抖音。于是想爬取一下抖音的视频。网上搜索资料,发现多数都是爬取固定用户的主页视频。我想要的效果是爬取首页的随机视频和评论,于是自己抓包分析,实现效果。在做项目的过程中遇到了一些...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,383
精华内容 6,553
关键字:

抖音