爬取TikTok视频时长返回None,请求技术协助
解决TikTok视频时长爬取返回None的问题
问题根源
你用requests获取的是TikTok页面的静态HTML源码,但目标元素(tiktok-1g3unbt-DivSeekBarTimeContainer类的div)是通过JavaScript动态渲染生成的,静态源码里根本不存在这个元素,所以BeautifulSoup找不到,返回None。
解决方案1:用Selenium模拟浏览器渲染页面
Selenium会模拟真实浏览器加载页面,等待JavaScript执行完成后再获取完整的页面内容,这样就能找到动态生成的元素。
步骤:
- 安装Selenium:
pip install selenium
- 下载对应浏览器的驱动(比如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
相关产品推荐
相关产品推荐

