欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用python爬取m3u8格式視頻的具體實(shí)現(xiàn)

 更新時(shí)間:2022年08月05日 08:57:30   作者:信息不對(duì)等  
之前爬取的視頻都是mp4格式的,直接用requests請(qǐng)求就可以直接爬取,最近公司安排了一個(gè)小任務(wù),需要爬取m3u8這種格式的視頻,下面這篇文章主要給大家介紹了關(guān)于利用python爬取m3u8格式視頻的相關(guān)資料,需要的朋友可以參考下

m3u8原理

當(dāng)我們在網(wǎng)頁播放視頻時(shí),網(wǎng)頁向服務(wù)器發(fā)起一個(gè)以.m3u8結(jié)尾的連接請(qǐng)求,服務(wù)器會(huì)將具體的.ts文件鏈接路徑發(fā)送給網(wǎng)頁,網(wǎng)頁接收這寫鏈接路徑,并向這些鏈接發(fā)送請(qǐng)求,請(qǐng)求到的資源就是.ts視頻文件,他和我們常見的mp4文件只是封裝格式的不同,而且.ts文件的大小很小,我爬取的.ts文件只有六秒的視頻文件。之后網(wǎng)頁將這些.ts文件整合在一起并進(jìn)行播放。

腳本環(huán)境

python3.8、win 10

爬取步驟

python要做的事情

1、選擇可以爬取的視頻網(wǎng)站

2、獲取.m3u8的URL路徑

3、通過requests.get獲取.ts文件路徑

4、保存.ts文件

5、合并.ts文件為mp4格式

步驟的具體實(shí)現(xiàn)

1、視頻網(wǎng)站:https://www.3s8m.com/

2、隨便選擇一個(gè)視頻進(jìn)入播放頁面,按下F12或者Fn+F12,打開審查元素,選擇網(wǎng)絡(luò),刷新頁面,暫停視頻,在審查元素的網(wǎng)絡(luò)頁面選擇XHR(沒有可以直接在全部搜索m3u8),找到以m3u8結(jié)尾的數(shù)據(jù)包,點(diǎn)擊獲取URL

3、python 編寫代碼請(qǐng)求該URL,打印返回的數(shù)據(jù);代碼如下

import requests
url = “用第二部找到的URL填入”
results = requests.get(url) #發(fā)送get請(qǐng)求
results.encoding=“utf8” #設(shè)置編碼格式,從網(wǎng)頁源碼中的head中可以看編碼格式,這步不關(guān)鍵
print(results.text) #打印結(jié)果
results.close() #關(guān)閉

4、可以發(fā)現(xiàn)第3步中打印結(jié)果有很多URL地址,這些地址就是ts文件的地址,python下載ts文件

import request
url =“填入獲取到的ts文件的URL”
results = requests.get(url)
results.encoding =“utf8”
with open("./a.ts",“wb”) as file:
file.write(results.content)
results.close()

5、合并全部的ts文件,調(diào)用python的os庫,使用系統(tǒng)命令(copy /b a.ts+b.ts a.mp4)進(jìn)行合并

import os
os.system(“copy /b a.ts+b.ts a.mp4”)

python細(xì)節(jié)處理說明

1、上述是通過手動(dòng)查找獲取的m3u8地址,那么為什么不用python去爬取,如果用python去爬取那么就需要對(duì)爬取的內(nèi)容進(jìn)行分析檢索,我使用正則進(jìn)行檢索,也可以用xpath、bs4等方式進(jìn)行檢索。

2、一個(gè)m3u8地址會(huì)對(duì)應(yīng)多個(gè)ts文件地址,我們應(yīng)該對(duì)同一個(gè)m3u8的ts地址進(jìn)行整體保存,下載后進(jìn)行整合在一起變?yōu)橐粋€(gè)m3u8對(duì)應(yīng)一個(gè)視頻

3、我們在瀏覽上述提供的網(wǎng)站時(shí)會(huì)發(fā)現(xiàn),有些資源有不通播放源,有些版源不能用,那么我們在進(jìn)行檢索的時(shí)候可以多加一個(gè)進(jìn)行源切換的操作

4、至于保存的文件名、文件路徑這些自己返回,具體的代碼下面會(huì)提供一個(gè)參考。

參考代碼

使用代碼的前提條件及說明:

1、在代碼文件的目錄下建一個(gè)名為ts_path的文件夾用于保存爬取過程中的臨時(shí)文件(.ts文件)

2、保存的視頻會(huì)存放與代碼文件同一目錄線下,視頻名稱為 集數(shù).mp4

3、視頻下載完,ts_path中的文件需要手動(dòng)刪除,由于之前使用os.system進(jìn)行刪除,誤刪了我不少源碼,決定不加刪除代碼防止意外

4、代碼只是用與上述提供的網(wǎng)站,其他網(wǎng)站需要自己進(jìn)行修改

import requests
import re
import os

URL = "輸入U(xiǎn)RL" #視頻URL
resources = 0   #播放源選擇

episode_urls = [] #存放章節(jié)URL
episode_names = [] #存放章節(jié)名稱
m3u8_urls = []  #存放ts文件的URL

def get_episode(URL,resources): #獲取章節(jié)名和路徑
    results = requests.get(URL)
    results.encoding = "utf-8"
    all = results.text
    results.close()
    episode = re.findall('<ul class="dslist-group">.*?</ul>', all, flags=re.S)
    b = re.finditer('href=".*?</a>', episode[resources],flags=re.S)
    for i in b:
        i = i[0].replace('href="', "").replace('"', "")
        episode_urls.append("https://www.3s8m.com" + i.split('>', 1)[0])
        episode_names.append(i.split('>', 1)[1].replace("</a>", ""))
    print(episode_names)
    print(episode_urls)


def get_ts(episode_urls): #獲取ts文件路徑
    for i in episode_urls:
        results = requests.get(i)
        results.encoding = "utf8"
        results = re.search('https:.*?\.m3u8', str(results.text),flags=re.S)
        m3u8_urls.append(results[0].replace("\\", ""))
    print(m3u8_urls)


def download_video(episode_names, m3u8_urls): #下載ts文件并整合為mp4文件
    for i in range(len(m3u8_urls)):
        try:
            print(m3u8_urls[i])
            results = requests.get(m3u8_urls[i])
            results.encoding = "utf8"
            all = re.finditer("https://.*?#", results.text, flags=re.S)
            results.close()
            cmd = []
            n = 0
            for j in all:
                n += 1
                ts_url = j[0].replace("\n#", "")
                cmd.append(f'{n}.ts')
                results = requests.get(ts_url,)
                results.encoding = "utf8"
                with open(f"./ts_path/{n}.ts", "wb") as file:
                    file.write(results.content)
                results.close()
                print(f"{n}.ts 下載完成")
            os.chdir("ts_path")
            if ("ts_path" in os.getcwd()):
                cmd = "+".join(cmd)
                cmd = f"copy /b {cmd} {episode_names[i]}.mp4"
                os.system(cmd)
                os.system(f"move {episode_names[i]}.mp4 ../")
            os.chdir("../")
            print(f"{episode_names[i]}.mp4 下載成功")
        except Exception as e:
            print(e)
            exit(0)

if __name__ == '__main__':
    get_episode(URL, resources)
    get_ts(episode_urls)
    download_video(episode_names, m3u8_urls)

腳本跟目錄

總結(jié) 

到此這篇關(guān)于利用python爬取m3u8格式視頻的文章就介紹到這了,更多相關(guān)python爬取m3u8格式視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python列表中多元素刪除(移除)的實(shí)現(xiàn)

    Python列表中多元素刪除(移除)的實(shí)現(xiàn)

    本文主要介紹了Python列表中多元素刪除(移除)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 淺析python中numpy包中的argsort函數(shù)的使用

    淺析python中numpy包中的argsort函數(shù)的使用

    這篇文章主要介紹了python中numpy包中的argsort函數(shù)的使用,argsort()函數(shù)在模塊numpy.core.fromnumeric中,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-08-08
  • 基于python實(shí)現(xiàn)把圖片轉(zhuǎn)換成素描

    基于python實(shí)現(xiàn)把圖片轉(zhuǎn)換成素描

    這篇文章主要介紹了基于python實(shí)現(xiàn)把圖片轉(zhuǎn)換成素描,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解python while 函數(shù)及while和for的區(qū)別

    詳解python while 函數(shù)及while和for的區(qū)別

    這篇文章主要介紹了python while 函數(shù)及while和for的區(qū)別 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Python數(shù)據(jù)分析之雙色球中藍(lán)紅球分析統(tǒng)計(jì)示例

    Python數(shù)據(jù)分析之雙色球中藍(lán)紅球分析統(tǒng)計(jì)示例

    這篇文章主要介紹了Python數(shù)據(jù)分析之雙色球中藍(lán)紅球分析統(tǒng)計(jì),結(jié)合實(shí)例形式較為詳細(xì)的分析了Python針對(duì)雙色球藍(lán)紅球中獎(jiǎng)數(shù)據(jù)分析的相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • 如何利用python實(shí)現(xiàn)windows的批處理及文件夾操作

    如何利用python實(shí)現(xiàn)windows的批處理及文件夾操作

    最近工作中需要幾個(gè)腳本運(yùn)行其他程序,幾乎像一個(gè)Windows批處理文件,這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)windows的批處理及文件夾操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • python實(shí)現(xiàn)獲取當(dāng)前設(shè)備的地點(diǎn)位置

    python實(shí)現(xiàn)獲取當(dāng)前設(shè)備的地點(diǎn)位置

    這篇文章主要介紹了python實(shí)現(xiàn)獲取當(dāng)前設(shè)備的地點(diǎn)位置,電腦如何獲取當(dāng)前所處的地理位置?它不會(huì)像我們一樣對(duì)地理位置有感性的認(rèn)知,它只認(rèn)識(shí)數(shù)據(jù),簡言之,電腦可以通過獲取當(dāng)前連接的公網(wǎng)IP,反推所處的位置環(huán)境,需要的朋友可以參考一下
    2022-03-03
  • PyCharm如何設(shè)置Console控制臺(tái)輸出自動(dòng)換行

    PyCharm如何設(shè)置Console控制臺(tái)輸出自動(dòng)換行

    這篇文章主要介紹了PyCharm如何設(shè)置Console控制臺(tái)輸出自動(dòng)換行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python讀取txt文件數(shù)據(jù)的方法(用于接口自動(dòng)化參數(shù)化數(shù)據(jù))

    Python讀取txt文件數(shù)據(jù)的方法(用于接口自動(dòng)化參數(shù)化數(shù)據(jù))

    這篇文章主要介紹了Python讀取txt文件數(shù)據(jù)的方法(用于接口自動(dòng)化參數(shù)化數(shù)據(jù)),需要的朋友可以參考下
    2018-06-06
  • 通過實(shí)例了解Python str()和repr()的區(qū)別

    通過實(shí)例了解Python str()和repr()的區(qū)別

    這篇文章主要介紹了通過實(shí)例了解Python str()和repr()的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論