网易云课堂视频下载
1 通過網(wǎng)絡(luò)分析找到視頻的網(wǎng)址
?
?
2源代碼如下:
import requests import osimport optparseheaders = {"User - Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 84.0.4147.105 Safari / 537.36"}def down_load_ts(url,pathname):basepath = os.path.join(os.getcwd(),pathname)if not os.path.exists(basepath):os.mkdir(basepath)try:req = requests.get(url,headers=headers)#print(req.text)file_line_list = req.text.split('\n')if not "#EXTM3U" in file_line_list[0]:raise BaseException(u'非M3U8的連接')else:unknow = Truefile_index=100000for index,line in enumerate(file_line_list):if "#EXTINF" in line:unknow = Falseurl_ts = str(url).rsplit('/',1)[0] +'/'+ str(file_line_list[index+1])#下載文件名重新編號,以防合并是造成文件順序混亂file_name = str(file_index)+'.ts'file_index+=1full_file_name =os.path.join(basepath,file_name)# print(url_ts)process_ts(url_ts, full_file_name)if unknow:raise BaseException('未找到對應(yīng)的下載連接')else:print(pathname,':downloaded')print("start merge file to mp4")mergeFileToMP4(pathname)returnexcept Exception as e:print(e)returndef process_ts(url_ts,full_file_name):req_ts = requests.get(url_ts, headers=headers)print("downloading file:", os.path.split(full_file_name)[1])with open(full_file_name, 'ab') as fw:fw.write(req_ts.content)fw.flush()def mergeFileToMP4(pathname):os.chdir(os.path.join(os.getcwd(),pathname))cmd = "copy /b * new.tmp"os.system(cmd)os.system('del /Q *.ts')os.system('del /Q *.mp4')os.rename("new.tmp", "new.mp4")print("merge file is :",str(os.path.join(os.getcwd(),pathname,"new.mp4")))def main():# parser = optparse.OptionParser("usage -n <pathname> -u <m3u8 url> -h <help>\n")# parser.add_option('-n',dest = "pathname",type ="string",help="specify a save path name")# parser.add_option('-u',dest='url',type='string',help="specify a m3u8 url")# (options,args)= parser.parse_args()# pathname = options.pathname# url = options.url# if (pathname ==None) or (url == None):# print(parser.usage)# returnurl = 'https://jdvodluwytr3t.1217106454_a7850079a3ed43f29c6f4169201b4893_sd.m3u8?'pathname = '163nixiang-1'down_load_ts(url=url,pathname=pathname)if __name__ == '__main__':main()?
注:在ts文件進(jìn)行合并為mp4文件時(shí)沒有問題,但合成的文件就不能播放,通過多次測試發(fā)現(xiàn),是下載的ts文件因?yàn)槲募挠嵉膯栴},例如 d99.ts? d100.ts d990.ts 三個(gè)文件,在進(jìn)行合并是,d99.ts 會排在100之后跟d990.ts一起,因此對下載文件重新進(jìn)行了編號,問題解決。
總結(jié)
- 上一篇: python 实现modBus协议的cr
- 下一篇: 实用工具冰点文库