本教程仅供学习交流,切勿用于商业用途或非法行为。
教程开始
首先打开我们的电脑浏览器,这里使用Chrome谷歌浏览器
按F12打开开发者工具,在地址栏输入我们要分析数据的链接。
必要时打开抓包工具!
抖音
抖音链接:https://v.douyin.com/NgKw-yXdhxk/
打开链接

这里出现了让我们眼花缭乱的请求,直接掀桌子不看了
在抓包工具中我们看到了一个请求

从分享链接302到这个请求再302到后面的链接都包含同一个id,这个需要拿小本本记上

最后的请求这太多了不看了,就用这个链接:
https://www.iesdouyin.com/share/video/7492792720457616699
我们使用php或者python请求这个链接,输出这个链接页面的源代码

视频数据包含在这个里面
写个代码匹配一下吧
$response = curl('https://www.iesdouyin.com/share/video/' . $id, $header);
$pattern = '/window\._ROUTER_DATA\s*=\s*(.*?)\<\/script>/s';
preg_match($pattern, $response, $matches);
之后想要啥数据自己写不用多说了吧,需要注意的是抖音限制访问ip,国外ip可能无法解析到数据。
腾讯视频采集也可以用以上原理哦,以下是我之前写的python代码演示结果
{
"title": "无尽的尽头",
"description": "聚焦未成年人司法保护,讲述了未成年人检察小组初创,检察官林之桃与助理检察员白恩宇,为了孩子们,携手对抗人性之恶的故事。\n始于悬念,终于救赎;拨开迷惘,山止川行。",
"type_name": "电视剧",
"category_map": [
"10470",
"正片",
"1089",
"连续剧",
"2",
"电视剧"
],
"leading_actor": [
"任素汐",
"高伟光",
"刘琳",
"刘家祎",
"张小婉",
"唐曾",
"任宥纶",
"翟小兴",
"曲禾"
],
"area_name": "内地",
"new_pic_hz": "https://vcover-hz-pic.puui.qpic.cn/vcover_hz_pic/0/mzc00200wcmszla1745380121451/0",
"new_pic_vt": "https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc00200wcmszla1745380039152/0",
"video_num": "34",
"total_episodes": 34,
"video_ids": {
"0": {
"video_id": "n410108vchv",
"type": "免费",
"duration": 2488,
"play_title": "无尽的尽头 第01集",
"subtitle": "三少年霸凌同学致死!",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/n410108vchv.html"
},
"1": {
"video_id": "u4101b32q4x",
"type": "免费",
"duration": 2852,
"play_title": "无尽的尽头 第02集",
"subtitle": "少管所危机!是谁以身犯险?",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/u4101b32q4x.html"
},
"2": {
"video_id": "w41013kpwzd",
"type": "限免",
"duration": 3082,
"play_title": "无尽的尽头 第03集",
"subtitle": "林检察官未检小分队成立",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/w41013kpwzd.html"
},
"3": {
"video_id": "d4101i49lzm",
"type": "限免",
"duration": 2987,
"play_title": "无尽的尽头 第04集",
"subtitle": "黑心团伙租小孩专门干盗窃",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/d4101i49lzm.html"
},
"4": {
"video_id": "d4101bn44nu",
"type": "限免",
"duration": 2580,
"play_title": "无尽的尽头 第05集",
"subtitle": "太心疼!犯罪团伙逼小孩开水里捞肥皂",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/d4101bn44nu.html"
},
"10": {
"video_id": "s41011nrcd1",
"type": "VIP",
"duration": 3190,
"play_title": "无尽的尽头 第06集",
"subtitle": "受害者家属想不开跳楼!拉检察官垫背",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/s41011nrcd1.html"
},
"11": {
"video_id": "s4101lq4nrr",
"type": "VIP",
"duration": 2858,
"play_title": "无尽的尽头 第07集",
"subtitle": "游船杀子案!毒父二婚后心太狠",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/s4101lq4nrr.html"
},
"12": {
"video_id": "w41014e0g4r",
"type": "VIP",
"duration": 2618,
"play_title": "无尽的尽头 第08集",
"subtitle": "狠狠判!二婚男女以虐待孩子为乐",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/w41014e0g4r.html"
},
"13": {
"video_id": "x4101nqlipu",
"type": "VIP",
"duration": 3068,
"play_title": "无尽的尽头 第09集",
"subtitle": "双胞胎1死1伤凶手是亲爹?",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/x4101nqlipu.html"
},
"14": {
"video_id": "z4101a4xxbm",
"type": "VIP",
"duration": 2708,
"play_title": "无尽的尽头 第10集",
"subtitle": "保护女孩!桃姐抓校园偷拍真凶",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/z4101a4xxbm.html"
},
"15": {
"video_id": "b4101x0qre6",
"type": "免费",
"duration": 2920,
"play_title": "无尽的尽头 第11集",
"subtitle": "全校女生被猥琐男偷拍?",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/b4101x0qre6.html"
},
"21": {
"video_id": "r4101w1hwr5",
"type": "VIP",
"duration": 614,
"play_title": "无尽的尽头 纪录片1",
"subtitle": "《破晓》未成年人量刑依据",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/r4101w1hwr5.html"
},
"22": {
"video_id": "m4101mha9c6",
"type": "VIP",
"duration": 399,
"play_title": "无尽的尽头 纪录片2",
"subtitle": "《逐光》如何保护未成年人",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/m4101mha9c6.html"
},
"23": {
"video_id": "f4101r2g214",
"type": "VIP",
"duration": 384,
"play_title": "无尽的尽头 纪录片3",
"subtitle": "《炬火》受害者权益保护",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/f4101r2g214.html"
},
"24": {
"video_id": "z4101azlkh5",
"type": "VIP",
"duration": 115,
"play_title": "无尽的尽头 彩蛋1",
"subtitle": "渴望平等的交流",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/z4101azlkh5.html"
},
"25": {
"video_id": "i41018om73e",
"type": "VIP",
"duration": 91,
"play_title": "无尽的尽头 彩蛋2",
"subtitle": "白恩宇戏里戏外",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/i41018om73e.html"
},
"26": {
"video_id": "u41018ou0ui",
"type": "VIP",
"duration": 79,
"play_title": "无尽的尽头 彩蛋3",
"subtitle": "打鼓太不太容易",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/u41018ou0ui.html"
},
"27": {
"video_id": "j41019ib7xx",
"type": "VIP",
"duration": 66,
"play_title": "无尽的尽头 彩蛋4",
"subtitle": "白日梦想家",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/j41019ib7xx.html"
},
"28": {
"video_id": "i41010nuoxa",
"type": "VIP",
"duration": 89,
"play_title": "无尽的尽头 彩蛋5",
"subtitle": "“黄家旺”采访",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/i41010nuoxa.html"
},
"29": {
"video_id": "j41019r43j0",
"type": "VIP",
"duration": 118,
"play_title": "无尽的尽头 彩蛋6",
"subtitle": "拍摄现场直击",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/j41019r43j0.html"
},
"30": {
"video_id": "m4101s2fq4u",
"type": "VIP",
"duration": 72,
"play_title": "无尽的尽头 彩蛋7",
"subtitle": "熊孩子的战争",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/m4101s2fq4u.html"
},
"31": {
"video_id": "m41014czjn7",
"type": "VIP",
"duration": 101,
"play_title": "无尽的尽头 彩蛋8",
"subtitle": "论法言法语如何让人动容",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/m41014czjn7.html"
},
"32": {
"video_id": "z4101fwtgg7",
"type": "VIP",
"duration": 77,
"play_title": "无尽的尽头 彩蛋9",
"subtitle": "优秀检查官的炼成",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/z4101fwtgg7.html"
},
"33": {
"video_id": "y4101k02slt",
"type": "VIP",
"duration": 94,
"play_title": "无尽的尽头 彩蛋10",
"subtitle": "青年演员采访",
"video_url": "https://v.qq.com/x/cover/mzc00200wcmszla/y4101k02slt.html"
}
}
}
快手
快手解析需要加上请求头,这边加上这些

cookie填自己的
原理和抖音差不多
因为有时候获取不到快手完整的的源代码
这边加上代码
if (preg_match($pattern, $response, $matches)) {
// 定义正则表达式匹配函数并移除
$functionPattern = '/function\s*\([^)]*\)\s*{[^}]*}/';
// ... existing code ...
$cleanedApolloState = preg_replace($functionPattern, ':', $matches[1]);
// 移除多余的逗号
$cleanedApolloState = preg_replace('/,\s*(?=}|])/', '', $cleanedApolloState);
// 移除特定字符链
$charChainToRemove = ';(:());';
$cleanedApolloState = str_replace($charChainToRemove, '', $cleanedApolloState);
$cleanedApolloState = json_decode($cleanedApolloState, true);
$videoInfo = $cleanedApolloState['defaultClient'] ?? null;
$key = "VisionVideoDetailPhoto:{$id}";
$json = $videoInfo["{$key}"];
$video_url = $json['photoUrl'];
if ($video_url) {
$arr = array(
'code' => 200,
'msg' => '解析成功',
'data' => array(
'title' => $json['caption'],
'cover' => $json['coverUrl'],
'url' => $video_url,
)
);
return $arr;
}
}
因为第一个匹配的时候里面的数据不是完整的json数据,去除函数和其他字符后就可以用了
视频数据标签不是固定的

所以才需要前面的id作为动态key

皮皮搞笑
我们打开这个链接


这边请求就变少了,我们可以挨个看

在第一个请求中就包含我们需要的视频数据,url就是视频直链,这是明面上的接口
参数:

mid和pin都包含在链接里,int类型

这个接口就是评论的接口
示例代码:















请登录后查看评论内容