Python爬虫怎么抓取短视频数据_从页面分析获取真实视频URL

陌墨同学_6132

陌墨同学_6132

2026-04-17

607人浏览

原创

短视频平台HTML中无真实视频URL,因地址藏于XHR接口响应的加密字段中,需通过浏览器抓包定位接口、复现带签名的请求或用Playwright等工具执行JS获取。

python爬虫怎么抓取短视频数据_从页面分析获取真实视频url

为什么直接请求页面 HTML 拿不到视频 URL

短视频平台(如抖音、快手)的首页或详情页 HTML 里基本不写真实视频地址,video 标签要么没有,要么 src 是占位符或低质预览图。真实地址藏在 XHR 请求响应里,通常是 JSON 接口返回的加密字段或带签名的链接。

常见错误现象:
• 用 requests.get(url) 拿到的 HTML 里搜 "mp4" 或 "video" 一无所获
• 浏览器开发者工具里能看到网络面板有 /aweme/v1/web/video/feed/ 这类请求,但 Python 里复现失败

  • 关键原因是:这些接口强制校验 Referer、User-Agent,还依赖动态生成的 signature 或 msToken 参数
  • 部分接口要求登录态(sessionid 或 cookie 中的 odin_tt),未携带会返回 {"status_code":10110,"status_msg":"Forbidden"}
  • JS 渲染页(如抖音 PC 端)必须用无头浏览器抓首屏,否则连接口请求都触发不了

怎么定位真实视频接口(以抖音为例)

打开 Chrome 开发者工具 → Network → 切到 XHR → 刷新页面 → 找含 video、aweme、item 的请求。重点看响应体是否含 "play_addr" 或 "video_list" 字段。

典型路径:/aweme/v1/web/aweme/detail/(单视频)、/aweme/v1/web/video/feed/(信息流)。注意查询参数里的 aweme_id、count、cursor 都是关键标识。

  • 别只盯着 Response 标签——点 Headers 看 Request URL 全路径和 Query String Parameters
  • 复制该请求 → 右键 → Copy as cURL (bash) → 粘贴到在线工具(如 curlconverter.com)转成 Python requests 代码,能省掉 80% 的 header 配置
  • 如果接口返回空或 "status_code": 0 但没数据,大概率是 sign 过期了——这个值通常由前端 JS 计算,不能硬编码

绕过 signature 校验的实用方案

抖音系接口的 _signature 参数是基于 URL 和时间戳用 JS 算出来的,Python 直接仿写容易出错且维护成本高。更稳的做法是复用浏览器环境。

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
  • 用 selenium 或 playwright 启动 Chromium,执行 JS 提取 window.byted_acrawler.sign({url: 'xxx'}) 返回值
  • 轻量替代:用 execjs 运行提取出的签名函数(需先从网页源码里扒下 byted_acrawler.js 或对应逻辑),但 JS 更新后立刻失效
  • 最省事但有代价:放弃纯 requests,改用 playwright.sync_api.sync_playwright().start() 直接走真实浏览器上下文,所有 header、cookie、sign 自动带上

示例(Playwright 提取视频地址):

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://www.douyin.com/video/729xxxx")
    # 等待接口完成,再取 response
    video_url = page.evaluate('''() => {
        const req = [...performance.getEntriesByType("resource")].find(r => r.name.includes("aweme/detail"));
        return req ? JSON.parse(req.responseEnd).aweme_detail.video.play_addr.url_list[0] : null;
    }''')
    print(video_url)
    browser.close()

下载前必须检查的三个字段

拿到 url_list 里的链接别急着 requests.get(),先确认三件事:

  • url_list 通常有多个地址,优先选 ratio 含 "720p" 或 "1080p" 的项,避开 "playwm"(带水印)和 "playadr"(防盗链跳转)
  • 检查链接是否含 ?expires= 和 &signature= —— 这类 URL 有效期常短于 60 秒,必须立刻下载,缓存或延迟会导致 403 Forbidden
  • 发起下载请求时,headers 必须包含原始请求中的 Referer(如 https://www.douyin.com/),否则返回空响应或重定向到错误页

一个容易被忽略的细节:某些平台(如小红书)的视频 URL 响应头里带 Content-Disposition: attachment; filename="xxx.mp4",但实际返回的是 HTML 错误页——这时候要先检查 response.status_code 和 response.headers.get("Content-Type") 是否为 "video/mp4"。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python 爬虫

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1891

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

5224

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1829

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

31557

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3727

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3747

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1263

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2903

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程