需求分析
打开分享的链接,按F12进入开发者选项、找到了一个接口,该接口返回了该视频的大部分信息,包括封面,音乐,有水印视频的地址以及无水印的地址。
通过对比发现,只有aweme id
,webid
,msToken
,a_bogus
改变,其他的值写死即可。
再通过修改某些具体值,发现msToken
,a_bogus
写死即可(修改之后仍然能获取)
任务需求表
步骤 |
变量 |
|
一 |
aweme_id |
视频ID |
二 |
webid |
通过js生成,每台电脑都不一样(一般不会变) |
获取视频ID
抖音分享获取的链接会重定向到一个新的包含了ID
的地址,所以要通过短链接获取视频ID,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| def get_id(self): try: response = requests.head(self.url, allow_redirects=True) redirected_url = response.url try: matches = re.findall(self.pattern, redirected_url) if matches: aweme_id = matches[0] else: aweme_id = None except re.error as id_error: print("Error:", id_error) return None return aweme_id except requests.RequestException as e: print("Error:", e) return None
|
获取webid(无需)
在全局搜索webid的值,可以找到其存在某些js文件当中,可以直接截取。
1 2 3 4 5 6 7 8 9
| def get_webid(self): headers = { 'cookie': '', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/123.0.0.0 Safari/537.36', } response = requests.get(self.webid_url, headers=headers) web_id = response.json()['data']['frontier_params']['frontier_device'] return web_id
|
cookie太长了,可以去浏览器复制进去。
cookie不能随便改,但是不知道有没有时间限制。
获取视频信息接口
好像只需要知道aweme_id
就可以了,我把其他所有都删除了,一样是可以获取到信息的。
1 2 3 4 5 6 7 8 9 10 11 12
| def get_info(self, aweme_id): headers = { 'cookie': '', 'referer': 'https://www.douyin.com/video/7344169821317106971', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36', } params = ( ('aweme_id', aweme_id) ) response = requests.get('https://www.douyin.com/aweme/v1/web/aweme/detail/', headers=headers, params=params) mp4_info = response.json() return mp4_info
|
接口信息分析
名称 |
路径 |
作者头像 |
["aweme_detail"]["author"]["avatar_thumb"]["url_list"] |
作者名称 |
["nickname"] |
作者个签 |
["signature"] |
抖音号 |
["unique_id"] |
年龄(不真实) |
["user_age"] |
作品文案 |
["caption"] |
音乐封面 |
["music"]["cover_hd"][ "url_list"] |
音乐名字 |
["music"]["song"]["title"] |
音乐作者 |
["music"]["author"] |
音乐下载 |
["music"]["play_url"][ "url_list"] |
视频下载([0]为最高画质) |
["video"][ "bit_rate"][0]["url_list"] |