调出开发者模式及其使用方法
右键点击检查
F12
Ctrl+Shift+i
再选择Network下的XHR或者Media
网站视频的格式
有m3u8格式的,有m4s类型的,还有一些是能够直接使用开发者工具找到原视频地址的。此处详细介绍用python实现m3u8格式的批量获取并合并成一个MP4格式。
双击图中的m3u8格式进行下载
对下载的m3u8文件用记事本打开,如下图所示:
可以观察到每一个ts格式都是在进行加一,待会批量下载将会用到。
具体操作方法看此链接:https://astr.ac.cn/note/1441/
对小型动漫网站的批量下载与合成MP4格式
直接上代码进行说明:
import os
import requests
from concurrent.futures import ThreadPoolExecutor
from os.path import expanduser
from pyquery import PyQuery as pq
base_url = "https://vip.ffzy-play3.com/20230412/10868_2dee1b0a/2000k"
request_url = r'https://www.yhdmz.org/vp/23165-1-0.html'
html = requests.get(request_url).text
title = pq(html)('head > title').text()
start_index = 0
end_index = 1227
desktop_path = os.path.join(expanduser("~"), "Desktop")
path = fr"{desktop_path}\\video"
output_filename = fr"{desktop_path}\\{title}.mp4"
if not os.path.exists(path):
os.makedirs(path)
def download_file(index):
url = f"{base_url}/hls/849b6d7a1cc{index:06d}.ts"
response = requests.get(url, timeout=30)
if response.status_code == 200:
with open(f"{path}\\{index}.ts", "wb", buffering=8192) as f:
f.write(response.content)
print(f"Downloaded {url}")
else:
print(f"Failed to download {url}\n")
def merge_files(output_filename, start_index, end_index):
with open(output_filename, "ab") as output_file:
for index in range(start_index, end_index + 1):
input_filename = f"{path}\\{index}.ts"
with open(input_filename, "rb") as input_file:
output_file.write(input_file.read())
def remove_files(path):
for index in range(start_index, end_index + 1):
input_filename = f"{path}\\{index}.ts"
os.remove(input_filename)
os.removedirs(path)
with ThreadPoolExecutor(max_workers=120) as executor:
executor.map(download_file, range(start_index, end_index + 1))
for index in range(start_index, end_index + 1):
if not os.path.exists(fr"{path}\\{index}.ts"):
url = f"{base_url}/hls/849b6d7a1cc{index:06d}.ts"
response = requests.get(url, timeout=20)
if response.status_code == 200:
with open(fr"{path}\\{index}.ts", 'wb') as f:
f.write(response.content)
merge_files(output_filename, start_index, end_index)
remove_files(path)
print(f"All files merged into {output_filename}")
图中的requests请求库需要自己在cmd中输入pip install requests。
图中的pyquery解析库需要自己在cmd中输入pip install pyquery
再对图中用红圈标记出来的,任意单击一个并进行复制,结果如下图所示
将红圈中hls以前的设为base_url。
start_index为起始ts文件(000000.ts),将其赋值为0。
end_index为最终ts文件(001227.ts),将其赋值为1227。
if not os.path.exists(r'C:\Users\zombieman\Desktop\video'):
os.makedirs(r'C:\Users\zombieman\Desktop\video')
此段代码为批量下载ts文件夹的路径,我将其文件夹放置在桌面上。
output_filename = f"C:\\Users\\zombieman\\Desktop\\merged_file.mp4"
此段代码为合成ts文件后的mp4文件地址,我也将其放置在桌面上。
出现此结果表示下载完成。桌面上将会出现一个文件和文件夹。
如有错误或者改进之处,欢迎各位指正