python腳本
from multiprocessing import Process
from multiprocessing import Value
from urllib import request
import urllib
from time import sleep
import socket
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
class CatchVideo(object):
def __init__(self):
self.headers = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0"
self.url = ""
def set_url(self, i):
if i < 1000:
self.url = "https://youku.letv-cdn.com/2019/09/15/dR8FIvDrfTIl9Xb0/out%03d.ts" % i
else:
self.url = "https://youku.letv-cdn.com/2019/09/15/dR8FIvDrfTIl9Xb0/out%04d.ts" % i
# 獲取並下載ts文件
def dl_ts(self, i):
rq = request.Request(self.url)
rq.add_header('User-Agent', self.headers)
response = request.urlopen(rq)
resread = response.read()
with open("%03d.ts" % i, "wb") as f:
f.write(resread)
response.close() # 關閉urlopen方法,防止被ban
def start_work(self, i, my_flag):
self.set_url(i)
try:
self.dl_ts(i)
print(str(i) + ".ts success")
sleep(1)
except urllib.error.URLError as e:
print(e.reason)
my_flag.value = 1
# self.dl_ts(i)
except socket.timeout as e2:
print(e2.reason)
self.dl_ts(i)
if __name__ == '__main__':
catch_video = CatchVideo()
flag = Value("d", 0)
socket.setdefaulttimeout(20) # 設置socket層超時時間20秒
x = Value("d", 10)
j = 0
while j < 200:
# 5個進程併發運行
p_l = [Process(target=catch_video.start_work, args=(i, flag, )) for i in range(j, j+5)]
for p in p_l:
p.start()
for p in p_l:
p.join()
if flag.value:
print('===============download completed!=============')
break
j = j + 5
合同ts文件
copy /b D:\projects\bilibili\*.ts d:\new.ts
將ts文件轉成MP4
ffmpeg -i new.ts -vcodec copy -acodec copy new.mp4
參考資料
[01] Python3爬蟲SSL:unable to get local issuer certificate (_ssl.c:1045)
[02] 淺談 python multiprocessing(多進程)下如何共享變量
[03] python多進程共享變量Value使用tips
[04]Python 進程之間共享數據(全局變量)
[05] 如何使用ffmpeg將ts文件合併到mp4中?
[06] Python 字符串格式化輸出的3種方式
[07] Python字符串格式化 (%佔位操作符)
[08] python爬取視頻網站m3u8視頻
[09] 使用ffmpeg合併多個視頻文件
微信掃一掃關注公衆號
點擊鏈接加入羣聊
https://jq.qq.com/?_wv=1027&k=5eVEhfN
軟件測試學習交流QQ羣號:511619105