一. 找到这个页面的数据请求
用谷歌浏览器打开这个链接,可以看到标题栏里视频链接302跳转,成了另一个链接:

https://www.iesdouyin.com/share/video/6560551973479779591/?region=CN&mid=6560552003767012100&u_code=idc3k7bl&titleType=title&utm_source=copy_link&utm_campaign=client_share&utm_medium=android&app=aweme
按F12打开浏览器的开发者工具,切换到network标签,按上方的模拟终端按钮,切换到手机web形式。

file

然后刷新一下页面,我们可以看到network标签里,有很多的请求日志。

file

这里大部分的请求都是图片,js,css这种,这些是定义页面的样式和功能的,在这里我们并不需要。
切换到XHR(俗称AJAX)过滤,可以看到我们需要的数据请求:

file

一共有4个。分别点开这4个的Preview,查看这4个请求的返回数据。
在 ?items_id= 这个请求中,找到了2个视频的播放地址:

file

随便复制一个视频地址到浏览器打开,看到了无水印的视频(注意一定要切换到手机模拟模式)

file

二. 分析数据请求的参数
切换到headers标签,可以看到这次请求提交的参数

file

可以看到,这是一个GET请求,在url里传递了items_id和dytk这两个参数。
看到这个items_id是不是有点熟悉?看一下地址栏,这个id就在地址栏的url里:
https://www.iesdouyin.com/share/video/6560551973479779591/?region=…

另一个参数dytk暂时不知道,我们试一下去掉这个参数,请求一下看看:
file

一样也成功返回了地址。

三. 分析总结
通过上面的分析,步骤总结如下:

访问链接,通过跳转的地址拿到视频ID。

通过XHR中的 ?item_id= 这个链接,传递视频ID,拿到视频播放地址

拿到的播放地址就是无水印的视频地址

API接口:https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=视频ID

四.python实现

import requests
import re

api = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={}'

headers = {
    'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Mobile Safari/537.36'
}

def parse_video(videoUrl):
    r = requests.get(videoUrl, headers=headers)
    realUrl = r.url
    realUrl = realUrl.split('?')[0]
    videoId = re.findall('\d+', realUrl)[0]
    apiUrl = api.format(videoId)
    r = requests.get(apiUrl, headers=headers)
    result = r.json()
    items = result.get('item_list')
    item = items[0]
    video = item.get('video')
    address = video.get('play_addr').get('url_list')
    return address[0]

if __name__ == '__main__':
    parse_video('https://v.douyin.com/tbXQ9N/')

运行结果:

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200ff50000bc5s6gj3ft9inuibot10&line=0&ratio=540p&media_type=4&vr_type=0&improve_bitrate=0&is_play_url=1&is_support_h265=0&source=PackSourceEnum_PUBLISH
最后修改:2022 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏