You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python捕获网站发起的请求?自动获取视频流URL方法问询

如何自动化捕获动态生成的视频流URL并下载

你说得没错,仅靠requests库确实搞不定这种场景——因为requests只会静态抓取页面源码,不会执行页面里的JavaScript,而你要找的视频流URL是由JS动态发起请求获取的,或者是JS运行后才生成的。这种情况下,必须借助模拟真实浏览器行为的工具,它们能完整渲染页面、执行JS,还能监听和捕获页面发起的所有网络请求。

下面给你推荐几个常用工具和实现思路:

推荐工具及示例

1. Playwright(最推荐,配置简单,支持多浏览器)

Playwright是微软推出的自动化测试工具,对现代网站的兼容性很好,API也很直观,能轻松监听网络请求。

步骤:

  • 先安装Playwright和浏览器驱动:
    pip install playwright
    playwright install
    
  • 编写脚本捕获视频流URL并下载:
    from playwright.sync_api import sync_playwright
    import requests
    
    def capture_video_stream(url):
        with sync_playwright() as p:
            browser = p.chromium.launch(headless=False)  # headless=True可以后台运行
            page = browser.new_page()
            
            # 监听所有网络请求,过滤出视频流相关的URL(比如.m3u8/.mp4)
            video_url = None
            def handle_request(request):
                nonlocal video_url
                if request.resource_type == "media" or ".m3u8" in request.url or ".mp4" in request.url:
                    video_url = request.url
                    print(f"捕获到视频流URL: {video_url}")
                    # 找到后可以停止监听
                    page.remove_listener("request", handle_request)
            
            page.on("request", handle_request)
            
            # 加载目标页面,等待视频请求发起
            page.goto(url)
            page.wait_for_timeout(5000)  # 根据页面加载速度调整等待时间
            
            browser.close()
            
            # 下载视频流
            if video_url:
                with open("downloaded_video.mp4", "wb") as f:
                    response = requests.get(video_url, stream=True)
                    for chunk in response.iter_content(chunk_size=1024*1024):
                        if chunk:
                            f.write(chunk)
                print("视频下载完成!")
    
    if __name__ == "__main__":
        target_url = "你的目标网页URL"
        capture_video_stream(target_url)
    

2. Selenium + Chrome DevTools Protocol(CDP)

Selenium是老牌自动化工具,结合Chrome DevTools的网络监听能力也能实现需求。不过配置相对繁琐一点,需要手动处理CDP的调用,适合已经熟悉Selenium生态的开发者。

3. Pyppeteer(Python版Puppeteer)

基于Chrome的无头浏览器工具,API风格和Playwright类似,但项目维护活跃度不如Playwright,适合偏好Chrome专属工具的场景。

额外实用技巧

  • 如果视频是HLS流(.m3u8格式),直接用requests下载的只是播放列表文件,需要用ffmpeg或者专门的Python库(比如hls-downloader)来合并成完整视频:
    ffmpeg -i "你的m3u8 URL" -c copy output.mp4
    
  • 部分网站会校验Cookie或User-Agent,你可以在模拟浏览器时设置和Chrome一致的UA,或者保留登录后的Cookie,避免被反爬拦截。
  • 可以更精准地过滤请求:比如根据请求的域名、路径关键词,或者响应的Content-Type(比如video/mp4)来定位视频流URL,减少无效请求的干扰。

内容的提问来源于stack exchange,提问作者Zoltán Buka

火山引擎 最新活动