使用Python下載電影

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合併多個視頻文件

微信掃一掃關注公衆號
image.png
點擊鏈接加入羣聊

https://jq.qq.com/?_wv=1027&k=5eVEhfN
軟件測試學習交流QQ羣號:511619105

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章