前言:最近一段时间在家经常会用抖音来度过娱乐时间,经常会直接通过抖音软件向好友分享视频。自己无聊至极就花了一上午的时间做了一个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 打造属于自己的抖音视频下载器相关推荐

  1. 一个抖音视频下载代码

    2019独角兽企业重金招聘Python工程师标准>>> <dependencies><dependency><groupId>cn.hutool& ...

  2. 如何使用 Python 开发一个【抖音视频下载神器】

    国外有个在线网站,专门帮别人下载 YouTube 上面的视频,功能很简单直接,就是把你想要的 youtube 视频地址复制进去,然后点击 start 就可以下载视频: 不过,当你点击下载的时候,会跳转 ...

  3. 抖音视频下载改md5

             抖音视频下载改md5          继续发帖:有人发布了为期三天的渔网两天,无法继续创建,因此无法通过人工审核快速通过            点击  关注祥瑞自媒体,了解更多视频 ...

  4. python,抖音视频下载

    python和tkinter制作得抖音下载器 输入抖音分享链接,个人名片-链接形式 , 现在用抖音红人 面筋哥做测试:http://v.douyin.com/d5xrhV/点击GO 每个视频都截图了1 ...

  5. 1024程序员节 - 分享一个抖音视频下载程序

    在网上调用别人的接口来实现的功能 import requests import execjs# 生成参数s def generateStr(a):js = '''test = function(a) ...

  6. 《2019/04/12》java下载抖音视频

    java下载抖音视频 下载抖音视频,获取到抖音视频的下载地址之后,类似: String url = "https://aweme.snssdk.com/aweme/v1/play/?vide ...

  7. 抖音人设打造的好处,抖音如何打造爆款视频:国仁楠哥

    随着抖音短视频的兴起越来越多的朋友加入短视频行业,无论是企业还是个人都知道这里隐藏着巨大的利益.当然了遇到最多的问题就是,刚开始做抖音,不知道拍什么内容才能够吸引到更多人的关注,或者说视频爆了,也涨了 ...

  8. Python爬虫之抖音视频批量提取术

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  9. Python爬虫学习,批量爬取下载抖音视频

    这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙 项目源码展示 ''' 注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料, ...

最新文章

  1. 认清自己,就能活出更好的自己
  2. 请还互联网产业一个朗朗乾坤
  3. [转]C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
  4. 6翻了C语言,《嗨翻C语言》随书练习六 6章 二叉树简单例子
  5. Ocelot中使用Butterfly实践
  6. 1、Flutter_初体验_创建第一个应用_AndroidStudio_windows
  7. Spark内置图像数据源初探
  8. android 手势类的封装,Android手势识别简单封装类
  9. ActiveMQ学习总结(1)——ActiveMQ快速入门
  10. 【sklearn第九讲】支持向量机之分类篇
  11. vue中实现简单切换图片效果
  12. python爬取有道翻译的代码_python爬虫之有道翻译
  13. 测试网站速度的8款免费工具推荐
  14. maya表情blendshape_【UE4】人物角色MorphTarget(Blendshape) 面部表情制作方案
  15. k8s集成containerd,集成crictl工具,集成kata
  16. DBeaver 给id设置为键 以及执行sql查询语句
  17. 对面向对象和面向过程的理解
  18. Es6常见面试题必看!
  19. HHDBCS的快捷命令使用
  20. 网桥工作在计算机网络的,网桥的作用和工作原理是什么

热门文章

  1. 内存分析(二) AVFrame
  2. 《CSDN/TUP 系列活动:我们的开源》学习
  3. BugkuCTF之misc题之图穷匕见
  4. Nginx多策略流量分发
  5. 启动mongodb数据库服务
  6. 京东方27寸液晶屏MV270FHM-N20参考参数
  7. js实现格式化JSON数据方法
  8. matlab空间曲面拟合,【Matlab】离散点拟合曲面
  9. 【xml 报错】xml编译错误
  10. 钻展店铺推广,单品计划和超级推荐的区别