2019独角兽企业重金招聘Python工程师标准>>>

<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.3.1</version></dependency></dependencies>

先加入上面的坐标到pom文件中

定义常量类

/*** 常量类*/
public interface Const {//抖音随机刷新视频列表String url = "https://aweme-eagle.snssdk.com/aweme/v1/feed/?type=0&max_cursor=0&min_cursor=0&count=6&volume=0.0&pull_type=1&need_relieve_aweme=0&filter_warn=0&req_from&is_cold_start=0&longitude=120.388862&latitude=36.090072&ts=1545468521&js_sdk_version=1.5.4&app_type=normal&manifest_version_code=380&_rticket=1545468521415&ac=wifi&device_id=53039791462&iid=54915619827&mcc_mnc=46000&os_version=8.0.0&channel=update&version_code=380&device_type=MHA-AL00&language=zh&uuid=865296034887289&resolution=1080*1808&openudid=3a6f6cdf79dc8965&update_version_code=3802&app_name=aweme&version_name=3.8.0&os_api=26&device_brand=HUAWEI&ssmix=a&device_platform=android&dpi=480&aid=1128&as=a195cfd199360cbaed8411&cp=f667cb5e91d818ade1IgQk&mas=0139d6baba15f4cc628baffe83a99fad7c8c8c2c1c26a68646c60c";//User-AgentString userAgent= "com.ss.android.ugc.aweme/380 (Linux; U; Android 8.0.0; zh_CN_#Hans; MHA-AL00; Build/HUAWEIMHA-AL00; Cronet/58.0.2991.0)";
}

核心关键代码:

package com.github.liupeng328;import cn.hutool.core.io.FileUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.db.Entity;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;import java.io.File;public class Main implements Runnable{private static String absolutePath;//视频存放路径@Overridepublic void run() {while (true) {try {down();//开始下载}catch (Exception e){e.printStackTrace();}}}public static void main(String[] args) {System.out.println("******************************************************************");System.err.println("欢迎使用抖音视频下载工具,如有问题请加QQ群交流:317896269");System.err.println("开始抓取数据……");absolutePath = FileUtil.getAbsolutePath(new File(""));absolutePath = absolutePath+File.separator+"下载到的视频"+File.separator;System.err.println("视频存放路径为: "+absolutePath);//多线程下载ThreadUtil.execute(new Main());ThreadUtil.execute(new Main());}/*** 下载视频*/private static void down() {String body = HttpRequest.get(Const.url).header("User-Agent", Const.userAgent).execute().body();JSONObject json = JSONUtil.parseObj(body);//System.out.println(JSONUtil.formatJsonStr(body));//抽取数据 响应数据详细解析见: doc/抖音视频列表接口分析.jsonJSONArray list = json.getJSONArray("aweme_list");if(list.size()>0){for(int i = 0;i<list.size();i++){JSONObject object = list.getJSONObject(i);//作者信息JSONObject authorJson = object.getJSONObject("author");if(authorJson!=null){Entity author = Entity.create().set("uid",authorJson.getStr("uid"))//id.set("short_id",authorJson.getStr("short_id"))//短id.set("nickname",authorJson.getStr("nickname"))//昵称.set("gender",authorJson.getStr("gender"))//性别.set("signature",authorJson.getStr("signature"))//个性签名//头像图片uri 唯一标示 保存最大分辨率的那个.set("avatar_larger_uri",authorJson.getJSONObject("avatar_larger")==null?null:authorJson.getJSONObject("avatar_larger").getStr("uri"))//头像图片url 主机+uri 保存最大分辨率的那个.set("avatar_larger_url_list",authorJson.getJSONObject("avatar_larger")==null?null:authorJson.getJSONObject("avatar_larger").getJSONArray("url_list")==null?null:authorJson.getJSONObject("avatar_larger").getJSONArray("url_list").getStr(0)).set("birthday",authorJson.getStr("birthday"));//生日System.out.println("作者信息: "+JSONUtil.formatJsonStr(JSONUtil.toJsonStr(author)));//考虑到抖音视频非常多,单机不可能爬取完全部,所以该爬虫天然作为分布式,每一个客户端启动,都是整个爬虫的一部分//每个爬虫互联帮助,一起下载,加快下载速度//信息分布式共享//todo}//音频信息JSONObject musicJson = object.getJSONObject("music");if(musicJson!=null){Entity music = Entity.create().set("id",musicJson.getStr("id"))//id.set("title",musicJson.getStr("title"))//标题.set("author",musicJson.getStr("author"))//作者.set("album",musicJson.getStr("album"))//专辑//音乐uri 唯一标识 只保留最大的那张.set("play_url_uri",musicJson.getJSONObject("play_url")==null?null:musicJson.getJSONObject("play_url").getStr("uri"))//音乐url.set("play_url_url_list",musicJson.getJSONObject("play_url")==null?null:musicJson.getJSONObject("play_url").getJSONArray("url_list")==null?null:musicJson.getJSONObject("play_url").getJSONArray("url_list").getStr(0))//高清图uri 唯一标识 只保留最大的那张.set("cover_hd_uri",musicJson.getJSONObject("cover_hd")==null?null:musicJson.getJSONObject("cover_hd").getStr("uri"))//高清图url 只存最大的图.set("cover_hd_url_list",musicJson.getJSONObject("cover_hd")==null?null:musicJson.getJSONObject("cover_hd").getJSONArray("url_list")==null?null:musicJson.getJSONObject("cover_hd").getJSONArray("url_list").getStr(0));System.out.println("背景音乐信息: "+JSONUtil.formatJsonStr(JSONUtil.toJsonStr(music)));//考虑到抖音视频非常多,单机不可能爬取完全部,所以该爬虫天然作为分布式,每一个客户端启动,都是整个爬虫的一部分//每个爬虫互联帮助,一起下载,加快下载速度//信息分布式共享//todo}//视频信息JSONObject videoJson = object.getJSONObject("video");if(videoJson!=null){Entity video = Entity.create()//视频uri 唯一标识 只保留最高清的那个.set("play_addr_uri",videoJson.getJSONObject("play_addr")==null?null:videoJson.getJSONObject("play_addr").getStr("uri"))//高清视频url 只存最高清那个.set("play_addr_url_list",videoJson.getJSONObject("play_addr")==null?null:videoJson.getJSONObject("play_addr").getJSONArray("url_list")==null?null:getUrl(videoJson.getJSONObject("play_addr").getJSONArray("url_list")))//动态图uri 唯一标识 只保留最高清的那个.set("dynamic_cover_uri",videoJson.getJSONObject("dynamic_cover")==null?null:videoJson.getJSONObject("dynamic_cover").getStr("uri"))//动态图uil 只存最高清那个.set("dynamic_cover_url_list",videoJson.getJSONObject("dynamic_cover")==null?null:videoJson.getJSONObject("dynamic_cover").getJSONArray("url_list")==null?null:videoJson.getJSONObject("dynamic_cover").getJSONArray("url_list").getStr(0))//视频封面图uri 唯一标识 只保留最高清的那个.set("origin_cover_uri",videoJson.getJSONObject("origin_cover")==null?null:videoJson.getJSONObject("origin_cover").getStr("uri"))//视频封面图uil 只存最高清那个.set("origin_cover_url_list",videoJson.getJSONObject("origin_cover")==null?null:videoJson.getJSONObject("origin_cover").getJSONArray("url_list")==null?null:videoJson.getJSONObject("origin_cover").getJSONArray("url_list").getStr(0));;System.out.println("视频信息: "+JSONUtil.formatJsonStr(JSONUtil.toJsonStr(video)));//考虑到抖音视频非常多,单机不可能爬取完全部,所以该爬虫天然作为分布式,每一个客户端启动,都是整个爬虫的一部分//每个爬虫互联帮助,一起下载,加快下载速度//信息分布式共享//todo//下载视频HttpResponse response = HttpRequest.get(video.getStr("play_addr_url_list")).execute();if(response.getStatus()==302){String location = response.header("location");HttpUtil.downloadFile(location,absolutePath+video.getStr("dynamic_cover_uri")+".mp4");System.err.println(absolutePath+video.getStr("dynamic_cover_uri")+".mp4"+ "下载成功!!!");}else {HttpUtil.downloadFile(video.getStr("play_addr_url_list"),absolutePath+video.getStr("dynamic_cover_uri")+".mp4");}}}}}/*** 获得url列表中可以浏览器访问的那个url* 即:包含api.amemv.com 信息的url* @param jsonArray* @return*/private static String getUrl(JSONArray jsonArray) {for(int i = 0;i<jsonArray.size();i++){if(jsonArray.getStr(i).contains("api.amemv.com")){return jsonArray.getStr(i);}}return null;}}

转载于:https://my.oschina.net/sprouting/blog/2992808

一个抖音视频下载代码相关推荐

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

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

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

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

  3. 手写一个抖音视频去水印工具,千万别刚一个程序员

    百因必有果 说一下我为什么要做个抖音视频去水印工具,其实是因为我的沙雕女友,她居然刚我~ 有天晚上她在抖音看见一个非常具有 教育意义 的视频,"男人疼媳妇就该承包全部家务活",然后 ...

  4. 爬虫+pyqt5 打造属于自己的抖音视频下载器

    前言:最近一段时间在家经常会用抖音来度过娱乐时间,经常会直接通过抖音软件向好友分享视频.自己无聊至极就花了一上午的时间做了一个PC端的抖音视频下载器. 郑重申明:该文章介绍的技术仅供用于学习,不可恶意 ...

  5. 手写一个抖音视频去水印Java工具,千万别刚一个程序员

    关注公众号后台回复pay或mall获取实战项目资料+视频 百因必有果 说一下我为什么要做个抖音视频去水印工具,其实是因为我的沙雕女友,她居然刚我~ 有天晚上她在抖音看见一个非常具有 教育意义 的视频, ...

  6. 抖音视频下载改md5

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

  7. python,抖音视频下载

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

  8. python3 def download_python3下载抖音视频的完整代码

    python3下载抖音视频的代码如下所示: # -*- coding:utf-8 -*- from contextlib import closing import requests, json, r ...

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

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

最新文章

  1. 如何处理SQL Server事务复制中的大事务操作
  2. MailScanner相关规则设置
  3. 单页面应用微信分享跳坑指南
  4. 并发集合(二)使用非阻塞线程安全的列表
  5. 68 SD配置-发票凭证配置-定义出具发票类型
  6. AndroidStudio_安卓原生开发_Android开发中界面调试很别扭? 设置应用屏宽屏高_应用大小_design_width_in_dp---Android原生开发工作笔记140
  7. 塘沽十三中2021年高考成绩查询,2020天津高考成绩查询
  8. 机器人卡纸形状图片大全图片_天水生态木天花吊顶图片大全
  9. 【OpenCV的cvSplit函数】
  10. STM32F429之DCMI 数字相机接口
  11. Windows XP图片查看器打不开图片的解决办法
  12. 湘潭大学计算机学院考研喜报,湘潭大学化学学院考研率连续七年在全校排名第一...
  13. 《云原生的本手、妙手和俗手》——2022全国新高考I卷作文
  14. Android 仿百合网超火爆社交app首页滑动效果
  15. 武汉芯源CW32L083系列MCU在空气净化器的应用介绍
  16. wincc远程服务器配置,wincc连接远程opc服务器
  17. 基于SpringBoot的医疗管理系统(Java毕业设计)
  18. 啊哈添柴挑战Java1222. 输出菱形
  19. SSL协议和SET协议
  20. 无人机云台电机用的是哪种?

热门文章

  1. 分类又叫类目或者类别
  2. CC11XX系列的介绍和区别
  3. 金蝶容器Apusic中重新部署war包
  4. Unity编辑器AssetDatabase函数API用法中文详解-Chinar教程
  5. DRM 驱动程序开发(开篇)
  6. 计数器的设计--电子技术课程设计说明书--模99
  7. 单片机MCS-51系列指令快速记忆法
  8. 微信小程序加密消息解密工具类
  9. 跳槽需要注意的一些事
  10. Go2正式落地, 中国Gopher踏上新征程!