爬虫+pyqt5 打造属于自己的抖音视频下载器
前言:最近一段时间在家经常会用抖音来度过娱乐时间,经常会直接通过抖音软件向好友分享视频。自己无聊至极就花了一上午的时间做了一个PC端的抖音视频下载器。
郑重申明:该文章介绍的技术仅供用于学习,不可恶意攻击抖音网站。对抖音服务器造成的任何损失,后果自负。
具体的视频在如下链接地址:
douyin.mp4
需要用到的工具:
**1、Chrome浏览器(如Chrome,装了httpwatch的IE浏览器等)+ charles(个人比较喜欢的抓包工具)
2. Pycharm(任何一个自己熟悉的编译器即可)
其实在该软件的编写过程中,个人认为是分为两个部分。
1.视频抓包地址的分析以及获取
2.界面逻辑代码的编写
一、视频地址的分析与抓取
1.我们先在自己的手机端的抖音软件上选取一个自己像下载的视频,并通过连接分享给别人
2.我们在Chrome上面输入上文的链接,并点击右键–设置–network 。再单独打开charles软件。点击回车键开始获取内容
我们会发现我们在浏览器初始输入的地址变成了下方的地址。其实这里涉及爬虫的一个重定向问题( 重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。)
在这里的流程其实就是:先跳转到我填写的网址—根据当前网址的重定向信息获取到定向后的位置(即 location中的位置)
我们现在倒是能够打开视频进行播放了,但是我们怎么知道视频的实际地址在哪里呢?我们要如何进行下载呢?
其实上面的图片即是我们这两个步骤在charles上对应的抓取到的信息。但是当我们点击播放键的时候,我们在charles上就能发现不一样的地方。下图是点击播放键以后抓取的信息
细心的朋友可能会看到,当我们点击视频的时候他会自动跳转到一个地址,并进行缓存。但是这个地址的是在哪里找呢?这是最关键的一步。
通过仔细的分析,我发现视频的播放地址藏在 这个地址的响应体里面(这是一个随时变化的地址,我们在这里通过正则表达式能够很好的获取)
当我们获取到这个地址以后,继续发送请求发现该地址也是一个重定向地址,其实视频的最终地址是在下图(也就是图四进行视频缓存的地址):
对该地址发送请求以后,会发现他它的响应体是字节流(我们直接将二进制流写入文件即可保存)
二、界面逻辑代码
界面搭建所需要的组件和布局其实每个人都有自己的理解和审美,所以这里仅仅展示上面对地址的抓取和视频下载。
import requests
import re
import random
import time
from PyQt5.Qt import *class api(QObject):downSignal = pyqtSignal(list)def __init__(self,url,saveFilename):""":param url: 视频地址:param saveFilename: 保存的文件名"""super(api, self).__init__()self.session = requests.session()self.url = urlself.savename = saveFilenameuserAgent = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"]key = random.randint(0, 3)self.headers = {'content-type': 'application/json', 'User-Agent': userAgent[key]}def getdoumload(self):"""作用:获取最终的视频的下载地址:return: """try:url =self.urlrep = self.session.get(url, headers=self.headers, verify=False) # 获取跳转的链接self.downLoadUrl = re.findall("playAddr:(.*)", rep.text)[0].split('"')[1] # 获取视频的下载地址,会进行重定向except:self.downLoadUrl = "parse error"return self.downLoadUrldef downLoadVideo(self):"""作用:对视频文件进行保存,并发送信号给主界面:return: """try:r = self.session.get(self.downLoadUrl, headers = self.headers,verify = False)length = float(r.headers['content-length'])except:return Falsecount = 0time1 = time.clock()with open(self.savename, 'wb') as f:for chunk in r.iter_content(chunk_size=512):if chunk:f.write(chunk)count += len(chunk)p = count / length * 100intervals = time.clock() - time1speed = count / 1024 / 1024 / intervalsself.downSignal.emit([p, speed])if __name__ == '__main__':url = " https://v.douyin.com/J1cGcN5/"apt = api(url,"./xx.mp4")if apt.getdoumload() != "parse error":apt.downLoadVideo()
一个自己无聊做的小玩具,欢迎各位大神指出我的不足和错误,共同进步。
爬虫+pyqt5 打造属于自己的抖音视频下载器相关推荐
- 一个抖音视频下载代码
2019独角兽企业重金招聘Python工程师标准>>> <dependencies><dependency><groupId>cn.hutool& ...
- 如何使用 Python 开发一个【抖音视频下载神器】
国外有个在线网站,专门帮别人下载 YouTube 上面的视频,功能很简单直接,就是把你想要的 youtube 视频地址复制进去,然后点击 start 就可以下载视频: 不过,当你点击下载的时候,会跳转 ...
- 抖音视频下载改md5
抖音视频下载改md5 继续发帖:有人发布了为期三天的渔网两天,无法继续创建,因此无法通过人工审核快速通过 点击 关注祥瑞自媒体,了解更多视频 ...
- python,抖音视频下载
python和tkinter制作得抖音下载器 输入抖音分享链接,个人名片-链接形式 , 现在用抖音红人 面筋哥做测试:http://v.douyin.com/d5xrhV/点击GO 每个视频都截图了1 ...
- 1024程序员节 - 分享一个抖音视频下载程序
在网上调用别人的接口来实现的功能 import requests import execjs# 生成参数s def generateStr(a):js = '''test = function(a) ...
- 《2019/04/12》java下载抖音视频
java下载抖音视频 下载抖音视频,获取到抖音视频的下载地址之后,类似: String url = "https://aweme.snssdk.com/aweme/v1/play/?vide ...
- 抖音人设打造的好处,抖音如何打造爆款视频:国仁楠哥
随着抖音短视频的兴起越来越多的朋友加入短视频行业,无论是企业还是个人都知道这里隐藏着巨大的利益.当然了遇到最多的问题就是,刚开始做抖音,不知道拍什么内容才能够吸引到更多人的关注,或者说视频爆了,也涨了 ...
- Python爬虫之抖音视频批量提取术
欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...
- Python爬虫学习,批量爬取下载抖音视频
这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙 项目源码展示 ''' 注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料, ...
最新文章
- 认清自己,就能活出更好的自己
- 请还互联网产业一个朗朗乾坤
- [转]C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- 6翻了C语言,《嗨翻C语言》随书练习六 6章 二叉树简单例子
- Ocelot中使用Butterfly实践
- 1、Flutter_初体验_创建第一个应用_AndroidStudio_windows
- Spark内置图像数据源初探
- android 手势类的封装,Android手势识别简单封装类
- ActiveMQ学习总结(1)——ActiveMQ快速入门
- 【sklearn第九讲】支持向量机之分类篇
- vue中实现简单切换图片效果
- python爬取有道翻译的代码_python爬虫之有道翻译
- 测试网站速度的8款免费工具推荐
- maya表情blendshape_【UE4】人物角色MorphTarget(Blendshape) 面部表情制作方案
- k8s集成containerd,集成crictl工具,集成kata
- DBeaver 给id设置为键 以及执行sql查询语句
- 对面向对象和面向过程的理解
- Es6常见面试题必看!
- HHDBCS的快捷命令使用
- 网桥工作在计算机网络的,网桥的作用和工作原理是什么