如何从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




