You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

爬取TikTok视频时长返回None,请求技术协助

解决TikTok视频时长爬取返回None的问题

问题根源

你用requests获取的是TikTok页面的静态HTML源码,但目标元素(tiktok-1g3unbt-DivSeekBarTimeContainer类的div)是通过JavaScript动态渲染生成的,静态源码里根本不存在这个元素,所以BeautifulSoup找不到,返回None。

解决方案1:用Selenium模拟浏览器渲染页面

Selenium会模拟真实浏览器加载页面,等待JavaScript执行完成后再获取完整的页面内容,这样就能找到动态生成的元素。

步骤:

  1. 安装Selenium:
pip install selenium
  1. 下载对应浏览器的驱动(比如ChromeDriver,需和你的浏览器版本匹配),可将驱动路径配置到环境变量,或在代码中指定路径。

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome驱动,若驱动不在环境变量需指定executable_path参数
driver = webdriver.Chrome()
try:
    driver.get('https://vm.tiktok.com/ZMFFKmx3K/')
    # 等待目标元素加载完成,最多等待10秒
    time_container = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'tiktok-1g3unbt-DivSeekBarTimeContainer'))
    )
    # 打印时长文本,格式类似"00:15 / 00:15"
    print(time_container.text)
finally:
    driver.quit()

解决方案2:直接调用TikTok的API接口(更高效)

TikTok的视频数据通过API接口返回,直接请求接口能拿到结构化的视频信息(包括时长),比模拟浏览器更高效。

示例代码:

import requests
import re

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

# 请求分享链接,获取重定向后的真实视频URL
response = requests.get(share_url, headers=headers, allow_redirects=True)
real_url = response.url

# 从真实URL中提取视频ID(item_id)
item_id_match = re.search(r'/video/(\d+)', real_url)
if not item_id_match:
    print("无法提取视频ID")
    exit()
item_id = item_id_match.group(1)

# 调用视频详情API接口
api_url = f'https://www.tiktok.com/api/v1/item/detail/?item_id={item_id}'
headers['Referer'] = real_url  # 必须添加Referer,否则会被拦截
api_response = requests.get(api_url, headers=headers)
data = api_response.json()

# 提取视频时长(单位:秒)并转换为分秒格式
video_duration = data['itemInfo']['itemStruct']['video']['duration']
minutes = video_duration // 60
seconds = video_duration % 60
print(f"视频时长:{minutes:02d}:{seconds:02d}")

注意事项:

  • TikTok的API接口可能会随时调整,若接口失效需重新抓包更新。
  • 请求头需模拟真实浏览器,否则易被反爬拦截,建议定期更新User-Agent。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:25:19