楔子

好奇害死猫。搞了一夜

抓取抖音小视频

工具

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. 神“脑补”!只要一段话,就知道你的说话手势 | UC伯克利
  2. 中外教育专家“支招”中国学生如何接轨国际教育
  3. 接口文件也是.java结尾吗
  4. 数据中心水环热泵余热回收系统分析与应用
  5. HDU Problem - 1455 Sticks
  6. 漫游Kafka设计篇之主从同步
  7. SAP CRM和C4C的订单Number range
  8. win10安装程序无法将配置为在此计算机,win10安装程序无法正常启动(完美解决)
  9. .net中的mapinfo开发:准备(一)
  10. 杭电2066--一个人的旅行(Floyd)
  11. WCF笔记--泛型与集合数据类型
  12. latex 导出的pdf生成书签 目录
  13. windows java opencv怎么玩
  14. VS2019创建COM组件
  15. 经典网络结构 (五):ResNet (残差网络)
  16. 2021牛客暑期多校训练营#5:C-Cheating and Stealing
  17. vscode中文备注出现方框标注显示此字符非ascii字符如何取消
  18. 矩阵切换器有哪些控制方式,有什么好处
  19. datax 导入数据中文乱码_四种方法处理MYSQL导入中文数据时的乱码问题 | 很文博客...
  20. AsyncDisplayKit2.0教程(上)

热门文章

  1. 基于python的汽车销售网站设计与实现-计算机毕业设计源码+LW文档
  2. 鲁大师第六期电动车智能化测评报告出炉
  3. AI算法撑起市值,快手如何管理视频?
  4. 北京大学郭炜-最长上升子序列 动态规划讲解
  5. spring wiring beans
  6. 转载:configure执行流程(1.5.2)《深入理解Nginx》(陶辉)
  7. 对于有抱负的软件开发人员:采访是一条两条路
  8. arcgis pro生成剖面图
  9. Python语言程序设计——实验十
  10. PSCAD安装后例程出现无法运行错误