楔子

好奇害死猫。搞了一夜

抓取抖音小视频

工具

Fiddler 和 安卓手机。关于Fiddler对安卓应用手机抓包图文教程 自行网上说的明白清楚

1:获取个人关注


上图的地址是https://api.amemv.com/aweme/v1/user/following/list/?user_id=93267622308&max_time=1522535483&count=20&retry_type=no_retry&iid=29648784234&device_id=41459906457&ac=wifi&channel=meizu&aid=1128&app_name=aweme&version_code=179&version_name=1.7.9&device_platform=android&ssmix=a&device_type=m1+metal&device_brand=Meizu&language=zh&os_api=22&os_version=5.1&uuid=869014028487941&openudid=a60b54dc77755f2f&manifest_version_code=179&resolution=1080*1920&dpi=480&update_version_code=1792&_rticket=1522535483501&ts=1522535482&as=a105b0fcfaa35aacf04715&cp=0535a754a50dc7cae1ihza&mas=008b2f7d28109a62d85dfa44f97aa3f6daac8cec2c0c66c68686ac


每位用户信息多。此处只是关注 需要的。

个人关注信息列表

package cn.zhuzi.douyin;import java.io.IOException;
import java.util.List;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;import cn.zhuzi.douyin.bean.FollPerson;
import cn.zhuzi.douyin.bean.MyCareBean;import com.alibaba.fastjson.JSON;/*** 关注列表* * @author grq**/
public class MyCare {/*** 我关注 这个地址是动态变化的额,此时采集一次 就已文本的形式保存 关注人信息*/static String care_url = "https://api.amemv.com/aweme/v1/user/following/list/?user_id=93267622308&max_time=1522542279&count=20&retry_type=no_retry&iid=29648784234&device_id=41459906457&ac=wifi&channel=meizu&aid=1128&app_name=aweme&version_code=179&version_name=1.7.9&device_platform=android&ssmix=a&device_type=m1+metal&device_brand=Meizu&language=zh&os_api=22&os_version=5.1&uuid=869014028487941&openudid=a60b54dc77755f2f&manifest_version_code=179&resolution=1080*1920&dpi=480&update_version_code=1792&_rticket=1522542279863&ts=1522542279&as=a165723c573c4a96706506&cp=2dc7a95e7205cf62e1btnv&mas=006ce86afb4332bfcd460be343eb756f146c0cac6c0cec6c9c862c";public static void getMyCare() {try {// 缺少 ignoreContentType(true) 会报错// UnsupportedMimeTypeException: Unhandled content type. Must be// text/*, application/xml,Document document = Jsoup.connect(care_url).ignoreContentType(true).get();String careStr = document.body().html();System.out.println(careStr);MyCareBean myCare = JSON.parseObject(careStr, MyCareBean.class);FollPerson[] followings = myCare.getFollowings();System.out.println(JSON.toJSONString(followings));for (FollPerson follPerson : followings) {System.out.println(follPerson.getNickname());}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {System.out.println(System.currentTimeMillis());getMyCare();}}

2:获取主页

主页信息是 https://www.douyin.com/share/user/+uid (如下图)


上图恰好和主页列表数量一样,推测 主页列表地址是 https://www.douyin.com/aweme/v1/aweme/post/?user_id=58900737309&count=21&max_cursor=0&aid=1128

2.1:获取主页作品信息

package cn.zhuzi.douyin;import java.io.IOException;
import java.util.List;import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;import cn.zhuzi.douyin.bean.FollPerson;
import cn.zhuzi.douyin.bean.MyCareBean;
import cn.zhuzi.douyin.bean.PserWork;
import cn.zhuzi.douyin.bean.WorkList;import com.alibaba.fastjson.JSON;public class CarePerson {/*** 个人主页。忘记怎么找到了了 https://www.douyin.com/share/user/58900737309*/public static String perHost = "https://www.douyin.com/aweme/v1/aweme/post/?user_id=";public static String fexHost = "&count=21&max_cursor=0&aid=1128";public MyCareBean myCareBean;public String getPerHost() {return perHost;}public void setPerHost(String perHost) {this.perHost = perHost;}public MyCareBean getMyCareBean() {return myCareBean;}public void setMyCareBean(MyCareBean myCareBean) {this.myCareBean = myCareBean;}public static String getBaseUrlForPer() {return baseUrlForPer;}public static void setBaseUrlForPer(String baseUrlForPer) {CarePerson.baseUrlForPer = baseUrlForPer;}/*** 个人主页基本路径* https://www.douyin.com/aweme/v1/aweme/post/?user_id=58900737309&count* =21&max_cursor=0&aid=1128*/public static String baseUrlForPer = "https://www.douyin.com/share/user/";public void getPserWork() {FollPerson[] followings = myCareBean.getFollowings();String uid = followings[0].getUid();Connection connect = Jsoup.connect(baseUrlForPer + uid);Document document;try {document = connect.ignoreContentType(true).get();System.err.println(document.body().html());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {String mycatString = "[{'nickname':'一珺、','uid':'52616983119'},{'nickname':'Imperia_小然然','uid':'61141281259'},{'nickname':'光哥','uid':'58900737309'}]";List<FollPerson> parseArray = JSON.parseArray(mycatString, FollPerson.class);String url = CarePerson.perHost + parseArray.get(0).getUid() + CarePerson.fexHost;Connection connect = Jsoup.connect(url);Document document;try {document = connect.ignoreContentType(true).get();String html = document.body().html();PserWork parsework = JSON.parseObject(html, PserWork.class);List<WorkList> aweme_list = parsework.getAweme_list();for (WorkList workList : aweme_list) {System.out.println(JSON.toJSON(workList));}} catch (IOException e) {e.printStackTrace();}}
}

3:根据URL下载具体的内容

此处以 https://www.douyin.com/share/video/6536877257548369155为例子

代码如下

package cn.zhuzi.douyin;import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;import org.apache.commons.io.FileUtils;
import org.jsoup.Connection;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;import cn.zhuzi.douyin.bean.Mp4Parent;import com.alibaba.fastjson.JSON;public class DownFromDetailUrl {public static void main(String[] args) {try {String url = "https://www.douyin.com/share/video/6536877257548369155";Connection connect = Jsoup.connect(url);Document pageContext = connect.followRedirects(true).get();Elements elementsByTag = pageContext.getElementsByTag("script");String eleStr = elementsByTag.get(elementsByTag.size() - 1).toString();System.out.println(eleStr.indexOf("[{"));System.out.println(eleStr.lastIndexOf("}]"));String mp4urlText = eleStr.subSequence(eleStr.indexOf("[{") + 1, eleStr.lastIndexOf("}]") + 1).toString();Mp4Parent mp4Parent = JSON.parseObject(mp4urlText, Mp4Parent.class);String string = mp4Parent.getVideo().getPlay_addr().getUrl_list().get(0);System.out.println(string);// 得到url// https://aweme.snssdk.com/aweme/v1/playwm/?video_id=380e29ed5af54d22896d933c81980c31&line=0/*** 下载视频*/Response document = Jsoup.connect(string).ignoreContentType(true).timeout(8000).execute();BufferedInputStream stream = document.bodyStream();FileUtils.copyInputStreamToFile(stream, new File("c://heheda.mp4"));} catch (IOException e) {e.printStackTrace();}}
}

后记

之前看过一个笑话强扭的瓜不甜。没关系,扭下来我就开心 。不知道为何为了这个没用的搞了一夜。但是搞完了还是有点开心。明天整理代码。

Jsoup——抖音视频抓取(一)相关推荐

  1. Jsoup——抖音视频抓取(二)

    楔子 之前的统计作品数存在问题,就是只是统计了前20个,超过20个就没统计. 发现问题 问题出现于滚动.针对某一特定滚动3次.发现解决问题的所在 滚动3次的url 分别为 https://www.do ...

  2. 抖音无水印视频抓取与按帧截取图片

    代码实现无水印视频抓取并根据视频按帧取图. 你喜欢的抖音美女,每一帧都是壁纸,上码: import requests import re from urllib import request impo ...

  3. 通过java获取抖音用户主页信息(2020年9月)

    通过java获取抖音用户主页信息(2020年9月) 环境准备 本篇文章基于sts编辑器,jdk1.8,maven3 项目结构如下图 执行结果如下图 html请求工具类 HttpUtils代码如下 pa ...

  4. 抖音API分析,视频批量下载-初级

    2019独角兽企业重金招聘Python工程师标准>>> 使用工具charles,主要是用来获取访问的API数据的,为啥说初级呢,因为并没有解决mas加密,这样的话只能刷到50条新数据 ...

  5. java开发最新获取抖音无水印视频和背景音乐

    java版最新获取抖音无水印视频和背景音乐, 这个工具已经被我放到我的网站上做成了在线抖音无水印获取工具: 在线演示地址:http://www.yzcopen.com/video/dywsy 废话不多 ...

  6. 抖音视频解析的工具类

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一.一个解析抖音分析链接的工具类 import java.io.IOException; import java.util.HashM ...

  7. python3 抖音短视频链接去水印下载视频到本地

    基于近段时间对抖音,快手,秒拍等视频抓取一直想搞一下.加了个QQ群,里面全是自媒体,就是抖音.快手.秒拍的视频搬运工,把一个平台搬到另外一个平台上,去除水印.降低被干掉的危险.经过半天的琢磨,自己用p ...

  8. 如何结合爬虫与自动化,帮助小姐姐刷抖音完全解放掉双手

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:星安果 AirPython PS:如有需要Python学习资料的小伙 ...

  9. Java:利用正则表达式去水印下载抖音视频

    该java程序已实现抖音视频去水印下载,具体功能看下方具体代码实现说明 <!-- ①新建一个Maven项目②并导入jsoup依赖文件 --><dependency><gr ...

最新文章

  1. html iso标准文档,HTML ISO-8859-1 参考手册
  2. Python-面向对象 (二 继承)
  3. 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
  4. vb编程入门_【高能】用VB开发的彩票选号软件
  5. 在html页面提交值到动态页面时出现中文值为乱码的解决方案
  6. [有奖励]GeneralUpdate开源项目招募开发者
  7. pythonopencv显示图像_OpenCV-Python 读取显示图像 | 五
  8. 前端学习(1812):前端调试之shadow
  9. kex_exchange_identification: Connection closed by remote host Connection closed by 140.82.121.3 port
  10. python zip dict_关于python:zip(list)和zip(* list)之间的区别
  11. 圆柱体积计算机公式,圆柱的体积计算公式是什么 怎么计算
  12. Burst(突发)信号
  13. 论文笔记:2004-Model Predictive Control of a Mobile Robot Using Linearization
  14. 2022-爬虫-Selenium-百度安全验证
  15. 华为nova7星耀版和华为nova7普通版 的区别 哪个好
  16. 特写:美国B2C网站惨淡经营
  17. 运用卫星数据及AI技术 微软推出新一代模拟飞行游戏
  18. ZZULIOJ:按身高站队(实验课)
  19. alitum designer 快速制作元器件封装
  20. 如何美观的把SPSS统计结果复制粘贴到Word文档中?

热门文章

  1. 服务器主控系统,服务器控制管理
  2. 微信小程序:趣味娱乐多流量主微信小程序源码下载趣味制作,藏头诗,隐藏图
  3. 8.0魔兽服务器维护时间,魔兽8.0上线后你应该做什么 AFK很久老玩家回归需要注意这些...
  4. 【题解】【CF1041D】Glider
  5. linux格式化扩展分区报错解决
  6. 如何才能成为一名医生?
  7. 电脑怎么录屏?这三个简单的电脑录屏方法,不要错过
  8. 如何让DIV相对于body水平和垂直居中
  9. fixed定位div水平垂直居中
  10. Vuedraggable 拖拽组件