如何在Python中获取TikTok音乐链接的重定向URL?
问题原因
TikTok的这类短音乐链接跳转,不是服务器返回的HTTP 3xx重定向,而是前端JavaScript触发的客户端跳转。requests、urllib这类HTTP请求库只会获取服务器返回的原始页面内容,不会执行页面里的JS代码,所以抓不到浏览器里完成的跳转,自然返回的还是原链接。
解决方案
方法1:用无头浏览器模拟真实访问(推荐Playwright)
Playwright能模拟完整的浏览器环境,自动执行页面JS,从而获取跳转后的最终URL:
- 先安装依赖:
pip install playwright playwright install chromium
- 编写代码:
from playwright.sync_api import sync_playwright def get_final_tiktok_url(original_url): with sync_playwright() as p: # 启动无头Chrome,不显示浏览器窗口 browser = p.chromium.launch(headless=True) page = browser.new_page() # 打开链接,等待页面加载稳定 page.goto(original_url, wait_until="networkidle") final_url = page.url browser.close() return final_url # 测试示例 test_url = "https://www.tiktok.com/music/-7224086788926638082" print(get_final_tiktok_url(test_url))
方法2:直接调用TikTok内部API(更高效)
TikTok的短链接跳转本质是通过API获取音乐信息后生成完整URL,你可以跳过浏览器,直接请求API拿到音乐标题,拼接成目标链接:
- 编写代码:
import requests def build_full_music_url(songid): # 去掉songid开头的负号 music_id = songid.lstrip('-') api_url = f"https://www.tiktok.com/api/music/detail/?musicId={music_id}" # 模拟浏览器请求头,避免被拦截 headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://www.tiktok.com/" } resp = requests.get(api_url, headers=headers) music_data = resp.json() # 提取音乐标题并处理成TikTok的slug格式 music_title = music_data['musicInfo']['music']['title'] processed_title = music_title.replace(' ', '-').replace('/', '-').replace('?', '').replace('!', '') # 拼接完整URL return f"https://www.tiktok.com/music/{processed_title}-{music_id}" # 测试示例 test_songid = "-7224086788926638082" print(build_full_music_url(test_songid))
注意:TikTok的API规则可能会变动,如果出现请求失败,需要调整请求头或检查接口地址是否更新。
内容的提问来源于stack exchange,提问作者iim7b5-v7-im7
相关产品推荐
相关产品推荐

