You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从TikTok短链接中提取用户账号名与视频ID?

我之前也碰到过TikTok短链接重定向跑偏的问题,试过几个不用Selenium的靠谱方案,分享给你:

1. 模拟移动端浏览器请求,获取正确重定向目标

TikTok的短链接会根据请求头的User-Agent返回不同的跳转目标——默认请求头容易拿到m.tiktok.com/v/xxx.html这类格式,但如果模拟真实移动端浏览器的请求头,就能直接跳转到带@用户名和视频ID的标准URL。

用Python的requests库实现的示例:

import requests

short_url = "https://vm.tiktok.com/pF6GGf/"
# 模拟iPhone Safari的请求头
headers = {
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"
}

# 允许自动重定向,获取最终跳转后的URL
response = requests.get(short_url, allow_redirects=True, headers=headers)
final_url = response.url

# 解析URL提取信息
parts = final_url.split("/")
username = parts[3]  # 得到 @blessy2flex
video_id = parts[5]  # 得到 6796374554391448838

这个方法的核心是让TikTok认为你是真实用户用手机访问,避免返回简化版的移动端页面。

2. 解析短链接页面的元数据(无需跟随重定向)

很多TikTok短链接的跳转页面里,会通过og:url这类Meta标签直接标注完整的视频地址。你可以只请求短链接的页面内容,不自动跳转,直接提取这些元数据。

示例代码(用BeautifulSoup解析HTML):

import requests
from bs4 import BeautifulSoup

short_url = "https://vm.tiktok.com/pF6GGf/"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 禁用自动重定向,获取短链接的原始页面
response = requests.get(short_url, allow_redirects=False, headers=headers)
soup = BeautifulSoup(response.content, "html.parser")

# 提取Open Graph的URL元标签
og_url_tag = soup.find("meta", property="og:url")
if og_url_tag:
    full_video_url = og_url_tag["content"]
    parts = full_video_url.split("/")
    username = parts[3]
    video_id = parts[5]

这个方法跳过了重定向逻辑,直接从短链接的页面源码里拿目标地址,稳定性相对更高。

3. 调用TikTok官方短链接解析API(需注意限制)

TikTok有官方的短链接解析接口,不过这个接口需要特定的请求头和参数,而且有访问频率限制,适合小批量请求。

示例代码:

import requests

short_url = "https://vm.tiktok.com/pF6GGf/"
headers = {
    "User-Agent": "TikTok 26.2.0 rv:262018 (iPhone; iOS 15.4.1; zh_CN) Cronet",
}

params = {
    "url": short_url,
    "aid": "1233"  # 这个是TikTok官方APP的固定标识
}

response = requests.get("https://api.tiktok.com/aweme/v1/shorturl/resolve/", params=params, headers=headers)
data = response.json()

if data.get("status_code") == 0:
    full_video_url = data["url_list"][0]
    parts = full_video_url.split("/")
    username = parts[3]
    video_id = parts[5]

⚠️ 注意:这个API的参数和规则可能随时变动,如果遇到请求失败,可以尝试更新User-Agent或者检查参数是否有效,同时不要高频请求,避免被限流。

通用注意事项
  • 所有方法都要控制请求频率,避免被TikTok的反爬机制封禁IP;
  • User-Agent可以定期更换,尽量模拟真实浏览器的标识;
  • 如果遇到短链接失效的情况,解析自然会失败,需要提前做异常处理。

内容的提问来源于stack exchange,提问作者dhsong

火山引擎 最新活动