爬取抖音短视频改良版(无水印版)

摘要:
在我之前的博客中,我使用了构建网址的方法来获取抖音短视频。但今天,当我再次研究抖音短视频时,我发现了一个更简单的方法。我发现我之前的分析太乏味了,所以我写了一篇博客来记录这种方法。

目录
使用更简单的方法

在我之前的一篇博客中,我用了构造网址的方法来获取抖音短视频,但是在今天我又一次的研究抖音短视频的时候发现了一个更加简单的方法,发现我之前的分析实在是太过繁琐了,所以有写了一篇博客来记录下这个方法。(上一篇博客就当做是就记录下分析网页的思路吧,就不作更改了)

与上一篇博客不同的是,这个方法可以省略掉大量的分析步骤

随便打开一个抖音个人主页,我选择的是爱奇艺体育,接着右键检查网页元素,点击network选项卡下的xhr选项,分析抓到的包

爬取抖音短视频改良版(无水印版)第1张

点到preview选项卡,点击video->download_addr->url_list

爬取抖音短视频改良版(无水印版)第2张

发现这下面跟着的两个网址正好是视频的网址(根本不需要构造,只是这个网址藏的有点深,需要非常耐心的寻找),打开网址查看:

爬取抖音短视频改良版(无水印版)第3张

提取到这个网址的时候我以为已经结束了,但是一个大佬@金亭玉立给我发来了一篇文章最新版抖音(20200428)去水印原理及源码,简单的原理与面临的挑战提醒了我一些没有想到的东西,在此表示感谢!

我们接着往下看,在下面的play_addr下面也有一个链接,这个链接下面的视频就是无水印版本的视频
爬取抖音短视频改良版(无水印版)第4张

爬取抖音短视频改良版(无水印版)第5张爬取抖音短视频改良版(无水印版)第6张

ok,现在我们只要想办法提取到它就大功告成了

我这次使用的方法中用到了jsonpath模块,直接pip下载就可以了:

pip install jsonpath

爬取抖音短视频改良版(无水印版)第7张

代码
import requests
import json
import jsonpath

class Douyin:
    def page_num(self,max_cursor):
        #随机码
        random_field = '00nvcRAUjgJQBMjqpgesfdNJ72&dytk=4a01c95562f1f10264fb14086512f919'
        #网址的主体
        url = 'https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAU7Bwg8WznVaafqWLyLUwcVUf9LgrKGYmctJ3n5SwlOA&count=21&max_cursor=' + str(max_cursor) + '&aid=1128&_signature=' + random_field
        #请求头
        headers = {
            'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
        }
        response = requests.get(url,headers=headers).text
        #转换成json数据
        resp = json.loads(response)
        #提取到max_cursor
        max_cursor = resp['max_cursor']
        #遍历
        for data in resp['aweme_list']:
            # 视频简介
            video_title = data['desc']
            #使用jsonpath语法提取paly_addr
            video_url = jsonpath.jsonpath(data,'$..paly_addr')
            for a in video_url:
                #提取出来第一个链接地址
                video_realurl = a['url_list'][1]
            # 请求视频
            video = requests.get(video_realurl, headers=headers).content
            with open('t/' + video_title, 'wb') as f:
                print('正在下载:', video_title)
                f.write(video)

        #判断停止构造网址的条件
        if max_cursor==0:
            return 1
        else:
            douyin.page_num(max_cursor)

if __name__ == '__main__':
     douyin = Douyin()
     douyin.page_num(max_cursor=0)
优点

这个方法的优点是可以省去很大一部分的分析网址的步骤,而且没有调用到webdriver(可以不限制浏览器),速度也会有显著提升,得到的视频也是无水印的

不足

还是没有解决随机生成字符串的问题,操作比较麻烦

使用方法

https://github.com/jjjjmhao/Sprider/blob/master/simplescreenrecorder-2020-05-04_23.54.22.mkv

免责声明:文章转载自《爬取抖音短视频改良版(无水印版)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇html页面实现自动刷新的几种方法(DevExpress2011控件教程)ASPxGridView 范例4 :ASPxGridView 行选择、多表头设计、数据导出、主表细表等功能实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JsonPath

JsonPath 在xml的使用过程中,对于xml的解析我们知道可以使用xpath的方式,随意的获取到我们想要的属性值。那么在使用json时,我们能不能实现同样的操作呢? 答案就是 json-path 基础介绍 跟 XPath 类似,JsonPath 通过路径来检索JSON,对语法格式如下 语法 符号 描述 $ 表示json的根节点,表示根节点下...

JSONPath

概要 JSONPath,XPath for JSON,是仿造 XPath 进行 JSON 定位的一套语法。 基本语法 XPath JSONPath Description / $ 根对象或元素 . @ 当前对象或元素 / . or [] 子操作 .. n/a 父操作 // .. 向下遍历,创意来自 E4X * * 通配 @...

Python3下利用JsonPath解析数据

前言 常见Web接口返回数据的时候,大部分是以 JSON 的形式返回,如果返回数据量不大的话,我们可以直接通过 字典取值 或 正则取值 的方式来直接获取。 但如果接口返回数据量比较大,或者嵌套的层级非常深,这种情况下使用 字典取值 就会变得有点困难;而 正则取值 虽然是万能的方法,但其只针对字符串才能使用。 那么在 Python 中,对于以上情况,有没有更...

kettle中json input中数据的解析

一、对于json数据的解析 简介 JSONPath - 是xpath在json的应用。              类似于XPath在xml文档中的定位,JsonPath表达式通常是用来路径检索或设置Json的。其表达式可以接受“dot–notation”和“bracket–notation”格式,例如$.store.book[0].title、$[‘sto...

jsonpath

1. java 类库      jayway/JsonPath        maven 使用方法 <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId>...