
做前端开发或者搞自媒体剪辑的朋友应该都遇到过这种尴尬场景刷到一个特别棒的参考视频或者某个教程里的音频片段正好能用想保存下来结果右键一点根本没有视频另存为这个选项。F12 打开开发者工具翻 Network 面板找链接吧一堆请求看得眼花好不容易找到个 m3u8 链接还是分片加载的根本没法直接下载。我之前也是这么折腾的直到同事给我推荐了一个浏览器扩展。装上之后打开网页它自动就把页面上的所有媒体资源列出来了点一下就能保存到本地连流媒体都能自动合并转码。今天把完整的使用方法分享出来。工具速览这个扩展叫 FlowPick本质上是一个媒体嗅探工具。装到浏览器里之后它会自动扫描当前网页加载的所有媒体资源不管是普通的 MP4、MP3 文件还是 HLSM3U8、DASHMPD这类流媒体协议它都能识别并处理。做前端调试、收集素材、剪辑参考甚至只是想离线保存个视频都用得上。准备工作基本没什么门槛确认两点就行浏览器用 Chrome、Edge 或其他 Chromium 内核的浏览器能正常访问 Chrome 应用商店或者提前准备好离线安装包详细操作步骤安装扩展拿到扩展包之后先别急着往浏览器里拖。我第一次装的时候没注意直接拖进扩展程序页面结果完全没反应还以为是文件损坏了折腾半天才发现是开发者模式没开。这个坑新手很容易踩。安装时注意这几点打开浏览器的【扩展程序】管理页面开启页面右上角的【开发者模式】把解压好的扩展文件夹直接拖入页面空白处看到 FlowPick 图标出现在浏览器工具栏说明安装成功如果是从 Chrome 应用商店直接安装那就更简单搜索到之后点【添加至 Chrome】确认权限弹窗等几秒图标出现就行。扫描页面资源装好之后不需要任何配置随装随用。打开你想抓取资源的网页比如某个视频教程页面点一下右上角的 FlowPick 图标它会立刻开始扫描把当前页面上所有加载过的媒体文件列出来。扫描完成后资源会按视频、音频、图片三个标签分类展示。每个文件旁边都标了格式、分辨率和大小一目了然。遇到 HLSM3U8或者 DASHMPD这类流媒体它也会自动识别不需要你手动去翻网页代码找链接。有些网站做了资源加密或者视频是动态加载的第一次可能识别不到刷新页面或者让视频播放几秒后再点扩展图标一般就能扫出来。预览确认再保存到本地找到目标文件之后别急着点下载。列表里每个资源旁边都有个小播放按钮建议先点开预览一下确认是不是自己要的那段内容免得下错了浪费时间。FlowPick 内置了播放器视频和音频都能直接在线预览。确认没问题后点下载图标就能保存到本地。下载过程中扩展里会显示实时进度也支持同时勾选多个文件批量下载。如果是批量抓图片它还带智能过滤功能能自动排除尺寸太小的图标和广告图只保留你真正需要的高质量素材省得后期再一张张删。流媒体资源下载后它会自动把分片合并转成标准的 MP4 或 MP3 格式直接就能用。常见问题用了几次有几个情况容易碰到提前说一下装完扩展图标找不到点浏览器右上角的拼图图标在列表里找到 FlowPick点旁边的小图钉把它固定到工具栏下次直接点就行。某些网站检测不到资源部分网站做了资源加密或者视频是动态加载的FlowPick 可能第一次识别不到。试试刷新页面或者让视频播放几秒后再点扩展图标一般就能扫出来。下载的流媒体文件播不了FlowPick 会自动把 M3U8、MPD 这类分片格式合并转成标准格式。如果转换完还是打不开大概率是下载过程中网络中断导致文件不完整重新下一次就好。收尾总的来说FlowPick 适合经常需要从网页收集音视频素材的人用。安装简单上手也快装上之后基本不用管打开网页就能用。相关的软件和教程都已经打包好了放在网盘里。私信我备注【手把手教你用 FlowPick 抓取网页音视频】即可获取完整教程。import requests from bs4 import BeautifulSoup import os from urllib.parse import urljoin # -------------------------- 基础配置区 -------------------------- # 目标网页地址使用时替换成你要解析的网页链接 TARGET_URL https://example-demo-page.com/sample # 本地素材保存文件夹可自行修改路径 SAVE_FOLDER downloaded_media # 请求头模拟普通浏览器避免被站点拦截 HEADERS { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 支持识别的媒体资源后缀可按需增减 SUPPORTED_MEDIA_SUFFIX (.mp4, .jpg, .png, .gif, .mp3, .webp) # -------------------------- 核心功能区 -------------------------- def create_save_dir(): 创建本地保存文件夹不存在则自动生成 if not os.path.exists(SAVE_FOLDER): os.makedirs(SAVE_FOLDER) print(f素材将统一保存到本地文件夹{SAVE_FOLDER}) def fetch_page_content(): 请求目标网页获取完整页面源码 try: resp requests.get(TARGET_URL, headersHEADERS, timeout15) resp.raise_for_status() resp.encoding resp.apparent_encoding return resp.text except Exception as e: print(f网页请求失败错误提示{str(e)}) return None def extract_media_urls(page_html, base_url): 从页面源码中提取所有符合规则的媒体资源链接 soup BeautifulSoup(page_html, html.parser) media_url_set set() # 提取img标签的图片资源\ for img_tag in soup.find_all(img):\ src_link img_tag.get(src) or img_tag.get(data-src)\ if src_link:\ full_link urljoin(base_url, src_link.strip())\ if full_link.lower().endswith(SUPPORTED_MEDIA_SUFFIX):\ media_url_set.add(full_link)\ \ # 提取video、audio标签的音视频资源\ for media_tag in soup.find_all([video, audio, source]):\ src_link media_tag.get(src)\ if src_link:\ full_link urljoin(base_url, src_link.strip())\ if full_link.lower().endswith(SUPPORTED_MEDIA_SUFFIX):\ media_url_set.add(full_link)\ \ return list(media_url_set) def save_media_files(media_url_list): 批量将识别到的媒体文件保存到本地 success_count 0 for idx, media_url in enumerate(media_url_list, 1): try: print(f正在处理第{idx}个资源{media_url\[-30:\]}...) file_name os.path.basename(media_url).split(?) # 避免空文件名自动生成默认命名 if not file_name or . not in file_name: file_name fmedia_file\_{idx}.{media_url.split(.)\[-1\]\[:5\]} file_resp requests.get(media_url, headersHEADERS, timeout30)\ with open(os.path.join(SAVE_FOLDER, file_name), wb) as f:\ f.write(file_resp.content)\ success_count 1\ print(f第{idx}个资源保存完成)\ except Exception as e:\ print(f第{idx}个资源处理失败{str(e)})\ \ print(f\n全部处理完成共识别到{len(media_url_list)}个资源成功保存{success_count}个) # -------------------------- 主执行入口 -------------------------- if **name** **main**: print( 网页媒体资源简易解析工具启动 ) create_save_dir() page_content fetch_page_content() if page_content:\ media_resources extract_media_urls(page_content, TARGET_URL)\ if not media_resources:\ print(当前页面未识别到符合规则的媒体资源可尝试更换网页测试)\ else:\ print(f\n成功识别到{len(media_resources)}个媒体资源开始批量保存...)\ save_media_files(media_resources) AI生成