吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 25697|回复: 209
收起左侧

[原创工具] 【python小白】抖音无水印视频下载小工具(windows)

    [复制链接]
丶霁灵 发表于 2020-5-11 09:13
本帖最后由 丶霁灵 于 2020-5-11 15:48 编辑

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

对于安全问题请大家放心,就我这python的能力,有危险的东西我也写不出来。
算了,直接发源码:
[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  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://lanzouj.com/iccvi4h




其实我还写了一个可以爬取知乎热点前100评论的小工具,只是没做ui。或许有机会给大家发出来~

免费评分

参与人数 66吾爱币 +70 热心值 +58 收起 理由
slink0 + 1 20201008单个的好像不行了
leukart007 + 1 + 1 谢谢@Thanks!
狗头爱着鳄鱼 + 1 + 1 我很赞同!
一道凉风. + 1 + 1 谢谢@Thanks!
rootlover + 1 + 1 我很赞同!
jiangsg + 1 + 1 谢谢@Thanks!
海绵丶 + 1 没用
happynocn + 1 + 1 谢谢@Thanks!
金色阳光 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Ichbinich + 1 + 1 NBNB多谢多谢
ronini + 1 + 1 谢谢@Thanks!
、沫小白 + 1 用心讨论,共获提升!
kkynietg + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
stta800 + 1 + 1 我很赞同!
小涛哥 + 1 + 1 不知道什么原因,批量下载下不齐
zwr8 + 1 + 1 谢谢@Thanks!
hodeting + 1 + 1 我很赞同!
迟乔君 + 1 我很赞同!
星爷lewis + 1 我很赞同!
二迷糊 + 1 + 1 我很赞同!
a7715910 + 1 + 1 谢谢@Thanks!
日后提拔 + 1 + 1 谢谢@Thanks!
Jack.K + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
南星 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
L.KH + 1 + 1 我很赞同!
瞳話 + 1 热心回复!
junhao.li + 1 用心讨论,共获提升!
zy2lxm + 1 + 1 谢谢@Thanks!
风雨雷电 + 1 + 1 可以更新出搜索关键词吗
chaosjr + 1 + 1 热心回复!
没有名字 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hw105 + 1 + 1 我很赞同!
teamom + 1 + 1 我很赞同!
黄金小铜人 + 1 + 1 虽然不用,但要支持
Ldsendjtm + 1 + 1 鼓励转贴优秀软件安全工具和文档!
电子猫 + 1 + 1 谢谢@Thanks!
蛤蟆石 + 1 + 1 谢谢@Thanks!
L叶 + 1 + 1 我很赞同!
jiupeak + 1 + 1 爬取知乎热点前100评论的小工具
EAST. + 1 感觉请求那个的用一个方法调用就行了
皮皮怪 + 1 + 1 谢谢@Thanks!
kk6065 + 1 + 1 评分给你,但是我运行不了,55555,见回复
Seper + 1 + 1 我很赞同!
Milk395 + 1 + 1 谢谢@Thanks!
X.x.X + 1 + 1 用心讨论,共获提升!
18023999 + 1 + 1 有待学习,值得好好研究研究。
qq63 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ASKZ晨风 + 1 + 1 感谢楼主的分享
小小/ng + 2 + 1 谢谢 @Thanks!
jpac22pdzm + 1 谢谢@Thanks!
9900000 + 1 谢谢@Thanks!
ryan0326 + 1 + 1 用心讨论,共获提升!
joyscn + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
达云兮 + 1 + 1 感谢,但看你的界面,没有按作者下载?
闻经获益 + 1 + 1 谢谢@Thanks!
xinkui + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
cpj001 + 1 用心讨论,共获提升!
qiuhf + 1 我很赞同!
rqhbwz + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
尼特凯雷 + 1 + 1 谢谢@Thanks!
逆天昊龙 + 3 + 1 用心讨论,共获提升!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
文西思密达 + 3 + 1 谢谢楼主制作这么好的软件,希望一直坚持下去,加油
飞行堡垒 + 1 我很赞同!
173202430 + 1 虽然不用,但要支持
mypj52 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
wdpfox 发表于 2020-5-12 10:01
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 丶霁灵 发表于 2020-5-11 15:44
随遇而安8 发表于 2020-5-11 15:18
因为我不知道字符串前面加个b转换成二进制是什么样子,所以我是想测试输出一下,输出不出来,不知道啥原 ...

因为前面加b的字符串应该是二进制的数据   我写的中文,肯定不行呀二进制就是\x80这种
mypj52 发表于 2020-5-11 09:27
我是来看代码的,有空学习学习
楼主可有python操作Excel的代码?
yks1985 发表于 2020-5-11 09:27
厉害了。。。这个太牛了
Ankess 发表于 2020-5-11 09:28
实用  感谢分享出来
qq743063 发表于 2020-5-11 09:30
感谢分享
duzhuoxian 发表于 2020-5-11 09:36
好强,我顶不住了
dcdcdddc 发表于 2020-5-11 09:41
网盘地址无法加载
茶城兄弟 发表于 2020-5-11 09:43
默默地支持你!
aria1983 发表于 2020-5-11 09:46
看起来不错,感谢楼主
huangxu 发表于 2020-5-11 09:49
这个不错,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-5 12:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表