爬取网站视频代码

 人参与 | 时间:2026-10-17 07:31:00

爬取网站视频代码

直接上代码。网站下面这段Python脚本能抓取大多数公开视频网站上的视频mp4文件,前提是代码视频没有加密且页面里直接暴露了源地址。我拿一个常见的网站CMS架构的影视站做过测试,成功率大概七成。视频

import requests from bs4 import BeautifulSoup import re import os def get_video_url(page_url): headers = {  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } resp = requests.get(page_url,代码 headers=headers, timeout=10) resp.encoding = 'utf-8' soup = BeautifulSoup(resp.text, 'html.parser') # 方法一:直接找video标签的src video_tag = soup.find('video') if video_tag and video_tag.get('src'): return video_tag['src'] # 方法二:正则匹配mp4链接 pattern = re.compile(r'https?://[^\s"\']+\.mp4[^\s"\']*') matches = pattern.findall(resp.text) if matches: return matches[0] # 方法三:找iframe再请求一次 iframe = soup.find('iframe') if iframe and iframe.get('src'): return get_video_url(iframe['src']) return None def download_video(url, save_path='video.mp4'): headers = {  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Referer': url } r = requests.get(url, headers=headers, stream=True, timeout=30) total = int(r.headers.get('content-length', 0)) with open(save_path, 'wb') as f: downloaded = 0 for chunk in r.iter_content(chunk_size=1024*1024): if chunk: f.write(chunk) downloaded += len(chunk) if total: print(f'\r进度: { downloaded/total*100:.1f}%', end='') print('\n下载完成') if __name__ == '__main__': page = input('输入视频页面地址: ') video_url = get_video_url(page) if video_url: print(f'找到视频地址: { video_url}') download_video(video_url) else: print('没找到视频源,可能需要分析JS或抓包') 

这段代码逻辑很直白:先请求页面,网站用BeautifulSoup解析HTML,视频依次尝试三种找源的代码方式。第一种最省事,网站直接读video标签的视频src属性。很多小站就是代码这么写的,连加密都懒得做。网站第二种用正则全局搜mp4链接,视频适合那些把地址藏在script标签里的代码站点。第三种处理iframe嵌套的情况,比如播放器单独放在一个子页面里。

但现实不会这么顺利。我试过一个站,页面里所有mp4链接都是base64编码的。得先提取出那串字符,解码后再拼上域名前缀。还有的站把视频切成ts分片,m3u8索引文件里全是相对路径,得自己拼完整URL再逐个下载合并。更麻烦的是用AES-128加密的m3u8,key藏在另一个接口里,还得带上cookie去拿。

抓包是绕不过去的坎。浏览器F12打开Network面板,刷新页面,筛选Media类型,看有没有直接请求视频文件。如果没有,就切到XHR或Fetch,找返回m3u8或mp4地址的接口。有时候接口需要签名参数,比如时间戳加MD5,那就得把JS里的加密函数扒出来,用Python复现一遍。我遇到过一个站,签名算法是md5(ts + 'salt_2024'),salt写死在混淆过的JS里,格式化后才找到。

Referer和User-Agent必须带上。少了Referer,服务器直接返回403。有些站还检查Cookie里的token,得先用requests.Session()保持会话,模拟登录或者至少访问一次首页拿到初始cookie。另外注意请求频率,别开多线程猛怼,封IP是分分钟的事。加个time.sleep(0.5),或者用代理池轮换。

最后说一句,爬视频只适合个人学习研究。批量下载、二次分发、商业使用,这些都有法律风险。我写这些代码纯粹是技术折腾,别拿去干坏事。

顶: 3365踩: 27