您的位置:

用Python下载视频

一、Python下载视频模块介绍

利用Python下载视频,我们需要使用第三方模块。

pip install requests
pip install beautifulsoup4

以上两个模块是我们常用的下载模块。其中requests是发送网络请求的。beautifulsoup4是用来解析网页。

二、Python下载m3u8视频

m3u8文件是一种常见的视频格式,我们可以利用Python下载m3u8视频。

1、获取m3u8网页链接

首先,我们需要获取m3u8网页链接。可以使用requests发送GET请求,并且beautifulsoup4解析HTML代码,找到m3u8链接。

import requests
from bs4 import BeautifulSoup

url = 'http://www.example.com/index.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
m3u8_url = soup.find('video')['src']

2、下载m3u8文件

使用requests发送GET请求,下载m3u8文件。我们可以使用文件流来写入数据。

m3u8_response = requests.get(m3u8_url, stream=True)
with open('video.m3u8', 'wb') as f:
    for chunk in m3u8_response.iter_content(chunk_size=1024):
        f.write(chunk)

3、解析m3u8文件获取ts链接

m3u8文件里面存储着多个.ts文件的链接,我们需要解析m3u8文件,找到这些链接。

with open('video.m3u8') as f:
    m3u8_content = f.readlines()

ts_list = []
for line in m3u8_content:
    if '.ts' in line:
        ts_list.append(line.strip())

4、下载ts文件

使用requests发送GET请求,下载ts文件。我们可以使用文件流来写入数据。

for ts_url in ts_list:
    ts_response = requests.get(ts_url, stream=True)
    with open(ts_url.split('/')[-1], 'wb') as f:
        for chunk in ts_response.iter_content(chunk_size=1024):
            f.write(chunk)

三、代码示例

综合以上内容,我们可以得到以下完整代码,用来下载m3u8视频。

import requests
from bs4 import BeautifulSoup

url = 'http://www.example.com/index.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
m3u8_url = soup.find('video')['src']

m3u8_response = requests.get(m3u8_url, stream=True)
with open('video.m3u8', 'wb') as f:
    for chunk in m3u8_response.iter_content(chunk_size=1024):
        f.write(chunk)

with open('video.m3u8') as f:
    m3u8_content = f.readlines()

ts_list = []
for line in m3u8_content:
    if '.ts' in line:
        ts_list.append(line.strip())

for ts_url in ts_list:
    ts_response = requests.get(ts_url, stream=True)
    with open(ts_url.split('/')[-1], 'wb') as f:
        for chunk in ts_response.iter_content(chunk_size=1024):
            f.write(chunk)