无水印视频的方法大家都已经知道了,我很早之前也写了一个脚本。最近学习了一下下pyside2,所以我用python写了一个小工具。
运行图:

from PySide2.QtWidgets import QApplication, QMessageBox,QFileDialog
from PySide2.QtUiTools import QUiLoader
import requests
import re
import json
import os
from PySide2.QtGui import  QIconclass Download:def __init__(self):self.ui = QUiLoader().load('抖音无水印.ui')os.remove('抖音无水印.ui')self.ui.search.clicked.connect(self.find_share)self.ui.search_2.clicked.connect(self.find_hot)self.ui.download.clicked.connect(self.save2)self.ui.download_2.clicked.connect(self.save)self.ui.findpath.clicked.connect(self.findpath)self.path =os.getcwd()self.ui.path.setText(self.path)def findpath(self):filePath = QFileDialog.getExistingDirectory(self.ui, "选择存储路径")if filePath == None or filePath == '':passelse:self.path = filePathself.ui.path.setText(self.path)def find_share(self):def find_url(share_url):headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}if share_url.find('v.douyin.com') < 0:return share_urlresponse = requests.get(url=share_url, headers=headers,allow_redirects=False)  # allow_redirects = False 不允许跳转url = response.headers['Location']p = re.compile(r"/playwm")url = p.sub('/play', url, count=1)p2 = re.compile(r"/video/(.+?)/")vid = p2.findall(url)[0]headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"}api = '''https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={}'''.format(vid)response = requests.get(api, headers=headers)html = response.textdata = json.loads(html)video_name = data["item_list"][0]["share_info"]["share_title"]return url, video_namedef find_play(url):headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"}response = requests.get(url, headers=headers)html = response.textp = re.compile(r'playAddr: [\'\"](https.+?)[\'\"]')v_url = p.findall(html)return v_url[0]def save_vid(url, name,filePath,ui):p = re.compile(r"/playwm")url = p.sub('/play', url, count=1)headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}response = requests.get(url, headers=headers)r = response.contentwith open(filePath+r'\{}.mp4'.format(name), 'wb') as f:f.write(r)QMessageBox.about(self.ui,'提示','{}\n下载完成!'.format(name))#ui.url_input.clear()def main(share_url,ui):b = find_url(share_url)url = b[0]name = b[1]play_url = find_play(url)save_vid(play_url, name, self.path,ui)share_url = self.ui.url_input.toPlainText()p = re.compile(r"(https://v.douyin.com/.+?/)")share_urls = p.findall(share_url)if share_urls == []:QMessageBox.about(self.ui,'警告','并没有找到分享链接\n或者\n分享链接可能有误!')else:for i in share_urls:main(i,self.ui)def find_hot(self):url_list = []names_list = []url = 'https://www.iesdouyin.com/web/api/v2/hotsearch/billboard/aweme/'headers = {'uesr-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36','referer': 'https://www.iesdouyin.com/share/billboard/?id=0&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin'}response = requests.get(url, headers=headers)html = response.textdata = json.loads(html)['aweme_list']error = ['/', '"', '\\', '|', '*', '>', '<', ':']for i in data:url = i['aweme_info']['video']["play_addr"]["url_list"][0]url_list.append(url)name = i['aweme_info']['share_info']['share_title']for each in error:if each in name:name = name.replace(each, ' ')names_list.append(name)self.url_list = url_listself.names_list = names_listself.ui.listWidget.clear()self.data = {}count = 0for i in self.names_list:self.ui.listWidget.addItem(i)self.data[i] = self.url_list[count]count += 1def save(self):try:item = self.ui.listWidget.currentItem().text()except:QMessageBox.about(self.ui,'警告','请先查询并选择!!')url = self.data[item]headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}response = requests.get(url, headers=headers)r = response.contentwith open(self.path+r'\{}.mp4'.format(item), 'wb') as f:f.write(r)QMessageBox.about(self.ui,'提示','下载完成!')def save2(self):try:item = self.ui.listWidget.currentItem().text()except:QMessageBox.about(self.ui,'警告','请先查询并选择!!')url = self.data[item]p = re.compile(r"/playwm")url = p.sub('/play', url, count=1)headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}response = requests.get(url, headers=headers)r = response.contentwith open(self.path+r'\{}.mp4'.format(item), 'wb') as f:f.write(r)QMessageBox.about(self.ui,'提示','下载完成!')png = b'图片的二进制数据'#这个数据我删了,太大了,你可以随便放一个图片的路径就好
bit_ui = b'ui的二进制数据'#这个UI的数据我也给删掉了,其实就是自己用qt画的,你可以自己随便画一个。with open('logo_3958666.png', 'wb') as g:g.write(png)
with open('抖音无水印.ui', 'wb') as f:f.write(bit_ui)
app = QApplication([])
app.setWindowIcon(QIcon('logo_3958666.png'))
os.remove('logo_3958666.png')
d = Download()
d.ui.show()
app.exec_()
本帖最后由 丶霁灵 于 2020-5-11 15:48 编辑

第一次发帖,没有什么经验,如果违规了请大家赶紧提醒我,我直接删除。
无水印视频的方法大家都已经知道了,我很早之前也写了一个脚本。最近学习了一下下pyside2,所以我用python写了一个小工具。
运行图:

对于安全问题请大家放心,就我这python的能力,有危险的东西我也写不出来。
算了,直接发源码:

[Python] 纯文本查看 复制代码
?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
from PySide2.QtWidgets import QApplication, QMessageBox,QFileDialog
from PySide2.QtUiTools import QUiLoader
import requests
import re
import json
import os
from PySide2.QtGui import  QIcon
class Download:
    def __init__(self):
        self.ui = QUiLoader().load('抖音无水印.ui')
        os.remove('抖音无水印.ui')
        self.ui.search.clicked.connect(self.find_share)
        self.ui.search_2.clicked.connect(self.find_hot)
        self.ui.download.clicked.connect(self.save2)
        self.ui.download_2.clicked.connect(self.save)
        self.ui.findpath.clicked.connect(self.findpath)
        self.path =os.getcwd()
        self.ui.path.setText(self.path)
    def findpath(self):
        filePath = QFileDialog.getExistingDirectory(self.ui, "选择存储路径")
        if filePath == None or filePath == '':
            pass
        else:
            self.path = filePath
            self.ui.path.setText(self.path)
    def find_share(self):
        def find_url(share_url):
            headers = {
                'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
            if share_url.find('v.douyin.com') < 0:
                return share_url
            response = requests.get(url=share_url, headers=headers,
                                    allow_redirects=False # allow_redirects = False 不允许跳转
            url = response.headers['Location']
            p = re.compile(r"/playwm")
            url = p.sub('/play', url, count=1)
            p2 = re.compile(r"/video/(.+?)/")
            vid = p2.findall(url)[0]
            headers = {
                'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"}
            api = '''https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={}'''.format(vid)
            response = requests.get(api, headers=headers)
            html = response.text
            data = json.loads(html)
            video_name = data["item_list"][0]["share_info"]["share_title"]
            return url, video_name
        def find_play(url):
            headers = {
                'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"}
            response = requests.get(url, headers=headers)
            html = response.text
            p = re.compile(r'playAddr: [\'\"](https.+?)[\'\"]')
            v_url = p.findall(html)
            return v_url[0]
        def save_vid(url, name,filePath,ui):
            p = re.compile(r"/playwm")
            url = p.sub('/play', url, count=1)
            headers = {
                'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
            response = requests.get(url, headers=headers)
            r = response.content
            with open(filePath+r'\{}.mp4'.format(name), 'wb') as f:
                f.write(r)
            QMessageBox.about(self.ui,
                              '提示',
                              '{}\n下载完成!'.format(name)
                              )
            #ui.url_input.clear()
        def main(share_url,ui):
            b = find_url(share_url)
            url = b[0]
            name = b[1]
            play_url = find_play(url)
            save_vid(play_url, name, self.path,ui)
        share_url = self.ui.url_input.toPlainText()
        p = re.compile(r"(https://v.douyin.com/.+?/)")
        share_urls = p.findall(share_url)
        if share_urls == []:
            QMessageBox.about(self.ui,
                              '警告',
                              '并没有找到分享链接\n或者\n分享链接可能有误!'
                              )
        else:
            for i in share_urls:
                main(i,self.ui)
    def find_hot(self):
        url_list = []
        names_list = []
        url = 'https://www.iesdouyin.com/web/api/v2/hotsearch/billboard/aweme/'
        headers = {
            'uesr-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36',
            'referer': 'https://www.iesdouyin.com/share/billboard/?id=0&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin'
        }
        response = requests.get(url, headers=headers)
        html = response.text
        data = json.loads(html)['aweme_list']
        error = ['/', '"', '\\', '|', '*', '>', '<', ':']
        for i in data:
            url = i['aweme_info']['video']["play_addr"]["url_list"][0]
            url_list.append(url)
            name = i['aweme_info']['share_info']['share_title']
            for each in error:
                if each in name:
                    name = name.replace(each, ' ')
            names_list.append(name)
        self.url_list = url_list
        self.names_list = names_list
        self.ui.listWidget.clear()
        self.data = {}
        count = 0
        for i in self.names_list:
            self.ui.listWidget.addItem(i)
            self.data[i] = self.url_list[count]
            count += 1
    def save(self):
        try:
            item = self.ui.listWidget.currentItem().text()
        except:
            QMessageBox.about(self.ui,
                              '警告',
                              '请先查询并选择!!'
                              )
        url = self.data[item]
        headers = {
            'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
        response = requests.get(url, headers=headers)
        r = response.content
        with open(self.path+r'\{}.mp4'.format(item), 'wb') as f:
            f.write(r)
            QMessageBox.about(self.ui,
                              '提示',
                              '下载完成!'
                              )
    def save2(self):
        try:
            item = self.ui.listWidget.currentItem().text()
        except:
            QMessageBox.about(self.ui,
                              '警告',
                              '请先查询并选择!!'
                              )
        url = self.data[item]
        p = re.compile(r"/playwm")
        url = p.sub('/play', url, count=1)
        headers = {
            'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
        response = requests.get(url, headers=headers)
        r = response.content
        with open(self.path+r'\{}.mp4'.format(item), 'wb') as f:
            f.write(r)
            QMessageBox.about(self.ui,
                              '提示',
                              '下载完成!'
                              )
png = b'图片的二进制数据'#这个数据我删了,太大了,你可以随便放一个图片的路径就好
bit_ui = b'ui的二进制数据'#这个UI的数据我也给删掉了,其实就是自己用qt画的,你可以自己随便画一个。
with open('logo_3958666.png', 'wb') as g:
    g.write(png)
with open('抖音无水印.ui', 'wb') as f:
    f.write(bit_ui)
app = QApplication([])
app.setWindowIcon(QIcon('logo_3958666.png'))
os.remove('logo_3958666.png')
d = Download()
d.ui.show()
app.exec_()

软件大小44M,有点大。其实我的脚本很小很小,但是我用pyinstaller打包出了110M的文件,然后又用Enigma Virtual Box打包压缩成单文件。
当然,如果我爬虫的目标网站更新或者api返回的数据也更新了,那我这软件就过期喽~

我只是作为一个业余爱好者分享一个学习python过程中的小作品,希望大家多多包涵~

我其实最在意的是,发布这东西应该不违法吧?(滑稽)
如果大家发现了我这软件有问题请直接留言,我会直接删除。

蓝奏云:https://lanzous.com/iccvi4h

【python小白】抖音无水印视频下载小工具(windows)相关推荐

  1. python下载b站视频_【python】抖音无水印视频下载和b站视频下载

    本帖最后由 370125229 于 2020-3-27 17:38 编辑 萌新一枚,拿这个练练手 用python写的,部分视频可能还是会有水印 抖音 蓝奏: https://www.lanzous.c ...

  2. Python 抖音无水印视频下载

    引言 上篇文章讲到抖音首页视频的爬取和下载,于是我想到能不能下载特定的视频.网上搜索一番,发现有网站提供抖音无水印视频的下载,但是试了几个,发现下载下来都还是有水印的视频.上篇文章已经实现了首页无水印 ...

  3. 抖音无水印视频下载方法

  4. 用 Python 下载抖音无水印视频

    说起抖音,大家或多或少应该都接触过,如果大家在上面下载过视频,一定知道我们下载的视频是带有水印的,那么我们有什么方式下载不带水印的视频呢?其实用 Python 就可以做到,下面我们来看一下. 很多人学 ...

  5. python无水印下载视频_用 Python 下载抖音无水印视频

    说起抖音,大家或多或少应该都接触过,如果大家在上面下载过视频,一定知道我们下载的视频是带有水印的,那么我们有什么方式下载不带水印的视频呢?其实用 Python 就可以做到,下面我们来看一下. 首先,我 ...

  6. 抖音上的python课程_用 Python 下载抖音无水印视频

    说起抖音,大家或多或少应该都接触过,如果大家在上面下载过视频,一定知道我们下载的视频是带有水印的,那么我们有什么方式下载不带水印的视频呢?其实用 Python 就可以做到,下面我们来看一下. 首先,我 ...

  7. 用Python下载抖音无水印视频!

    不知不觉距离小F最开始写的一篇抖音文章,时间也过了一年. 用Python全自动下载抖音视频! 上面这一篇阅读量是所有文章中阅读量最高的,当然还有另外两篇相关的. 用Python生成抖音字符视频! 用数 ...

  8. python下载抖音无水印视频

    只要一刷抖音视频,基本上就是停不下来,看到一些喜欢的视频,就想下载下来,但是通过正常手段下载的视频都会带有抖音的水印,今天就一起来使用非正常手段来看看怎么获取无水印抖音视频. 1.获取视频链接地址 这 ...

  9. python实现抖音无水印下载,从手动到脚本实现 2020

    工具下载链接:https://www.lanzous.com/ia4vgfg 视频创作不易,希望各位小伙伴尊重他人的作品哦 -------------------------------------- ...

最新文章

  1. NC:植物与根际微生物之间的通路被破解,通过合成生物学利用微生物固氮!...
  2. 「内容即服务」市场正在井喷
  3. 【CF应用开发大赛】微博社交简历
  4. Win64 驱动内核编程-12.回调监控进线程创建和退出
  5. cad导出pdf_通过CAD导出的文件或者由CAD导出的PDF文件打印慢
  6. 当C++爬山壁纸——C++山寨版
  7. inc指令是什么意思_mips指令集与cpu架构(一)
  8. 今天专攻POWERSHELL获取本机CPU,内存消耗
  9. 根据经纬度显示地图轨迹
  10. Redis缓存那点破事 , 绝杀面试官 25 问
  11. 神奇的 SQL 之团结的力量 → JOIN
  12. c java python go 哪种编程语言接近编程的本质_一图看懂编程语言迁移模式:终点站是Python、Go、JS...
  13. Seldom2.0: 如何更简单的实现HTTP接口测试
  14. 斯坦福大学的Gss Audio Codec 调试分析
  15. eplan2.7在win10安装教程
  16. WPF下关于NotifyIcon的使用
  17. 蓝牙打印机CPCL编程手册~汉印HM-A300
  18. 十三、商城 - 商城架构-分布式Dubbo(1)
  19. 传奇脚本关于!Setup.txt 详细介绍
  20. 计算机存储单元ASCI,在计算机存储器中,存储英文字母\quot;A\quot;时,存储的是它的( ) A.输入码B.ASCII码C - 作业在线问答...

热门文章

  1. 小米盒子4C本地内存存放电影、音乐
  2. Taro request 请求封装
  3. 试用cocos2dx 3.1.1
  4. C#串口编程 XML作为程序的配置文件
  5. C#简繁体转换方法(Microsoft.Office.Interop.Word)
  6. 软件架构--MVC介绍(垂直应用架构)
  7. SAP ABAP URL超链接设置处理
  8. [lintcode] 752. Rogue Knight Sven
  9. html语言教案模版,中班语言教案模板
  10. 达梦数据库DCA培训分享