需求
**前言**
最近学习Python,语法规则、变量等也看完了,但是觉得啥也没记住,打开
py不知道写啥,只能print(“xxx”)(ps:此处手动尴尬)。听说py网络爬取
挺不错就想着,通过爬取网上的电影来增加兴趣吧,找了一些电影网站,
F12后发现很多网站上电影格式都是ts分流的ts这个东东也是刚知道的。ts
流数据简单理解就是把一个高清电影分割成成千上万个ts格式的小文件。这
些小文件的时长、顺序以及加密方式都放在一个xxx.m3u8文件中,所以只要
下载m3u8文件,然后构造并下载所有ts文件就可以将电影下载本地播放了。
**简单写下需求**:
输入电影网址,运行程序,即可自动下载电影所有的ts流文件,下载完成后,自动合并成MP4或其他视频格式的文件。
程序结构目录
目录结构释义:
movieDownload:根目录
main:主程序目录
function.py:下载ts文件的方法模块
getConfig.py:获取配置文件方法
main.py:主程序
config:配置文件目录
config.ini:配置文件
output:ts流文件输出目录
m3u8.txt:待下载的网址文件
log:日志目录
log.log:日志文件
编写代码
基本思路
1.找到电影的index.m3u8文件url(这个文件中包含所有ts流文件名及顺序。后面需要通过该文件构造出所有的ts流文件下载,以及最后的合并顺序),把index.m3u8的url地址写入到m3u8.txt文件中。
2.下载u3m8文件
3.读取u3m8文件,把里面ts小文件名放入一个列表中待用。
4.循环从步骤3中的列表中读取单个ts链接,并下载到指定的目录。
5.合并所有ts小文件为ts(或MP4)格式。
6.美滋滋的观赏。
代码编写
使用的是PyCharm框架。
main.py代码:
# -*- coding:utf-8 -*-
"""
To be or not to bo ,That is a question !
"""
_author_ = 'wmx'
import os
import traceback
import movieDownload.main.getConfig as conf
from multiprocessing import Pool
import movieDownload.main.Function as fun
if __name__ == "__main__":
try:
fun.logging.debug("【需要下载的电影url文件目录】:" + conf.m3u8FilePath)
fun.logging.debug("【下载文件存储的根目录】:" + conf.filePath)
print("【需要下载的电影url文件目录】:" + conf.m3u8FilePath)
print("【下载文件存储的根目录】:" + conf.filePath)
m3u8FilePath = conf.m3u8FilePath #m3u8.txt文件的路径,从配置文件获取
filePath = conf.filePath #下载的文件存储根目录,从配置文件获取
urlList = fun.getM3u8List(m3u8FilePath) #获取m3u8.txt文件中的需要下载的url链接数量并放入列表。
fun.logging.debug("【需要下载的url数量】:"+str(len(urlList)))
print("【需要下载的url数量】:"+str(len(urlList)))
newDir = 0 #定义一个变量newDir,每个url下载的ts流文件放在单独的一个文件夹中,文件夹名从0开始。
for i in urlList: #循环取urlList的url
i=i.replace('\n','') #取出的url链接末尾会有一个换行符,去掉。
needDir = filePath+str(newDir) #构造新目录存放下载的ts文件,文件夹不存在的时候创建。
if not os.path.exists(needDir):
os