潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件

爬虫爱奇艺、优酷、腾讯VIP电影,如:复仇者联盟3:无限战争,如图1
图1
潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第1张图片

获得网址:https://www.iqiyi.com/v_19rr7q1fyc.html?vfrm=pcw_playpage&vfrmblk=G&vfrmrst=80521_like_hover_image10
解析网站接口:
解析播放网址:
在解析播放网址按F12,刷新 ,找道index.m3u8文件,里面含有ts文件的所有后缀地址,如图2.
获得index.m3u8文件与ts文件的请求地址即真实下载地址,如图3.4
index.m3u8文件真实下载地址:https://yushou.qitu-zuida.com/20180803/10873_88c5ba06/800k/hls/index.m3u8
ts文件真实下载地址: https://yushou.qitu-zuida.com/20180803/10873_88c5ba06/800k/hls/9fc6a5b8100000.ts
则所有ts文件地址为: https://yushou.qitu-zuida.com/20180803/10873_88c5ba06/800k/hls/ + ts后缀
图2
潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第2张图片
图3
潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第3张图片
图4
潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第4张图片
上代码:

'''下载VIP视频'''
import requests
import os
import re
import shutil

class Download_ts():
    '''下载m3u8文件,然后获得ts文件地址,下载ts文件并合并'''
    def __init__(self, url, m3u8, ts_half_url):
        self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0'}
        self.session = requests.session()
        self.num=1
        self.url=url
        self.m3u8_url=m3u8
        self.file_path='D:/电影/'
        self.ts_half_url=ts_half_url
        self.path, self.name =self.get_film_name()  #获得电影存储路径以及名称
        self.download_or_compose()


    def get_film_name(self):
        '''获得电影的名称'''
        r = self.session.get(self.url, headers=self.headers).content.decode('utf-8')
        pat = '(.*?)'
        name =re.compile(pat).findall(r)[0].split('-')[0]  #文件路径
        path=self.file_path+name
        isExists = os.path.exists(path)
        if not isExists:
            os.makedirs(path)
        return path,name

    def download_or_compose(self):
        if self.is_downloaded_mp4()==0:
            self.download_ts_into_mp4()
            self.compose_mp4()
        else:
            self.compose_mp4()

    def download_ts_into_mp4(self):
        print('开始下载。。')
        for url in self.save_and_read_m3u8_get_ts_url():
            self.download_ts(url)
        print('下载完毕。。')
        self.num=1

    def save_and_read_m3u8_get_ts_url(self):
        '''下载m3u8文件,并读取,适应性修改组合url'''
        print('开始下载m3u8文件。。。')
        r =self.session.get(self.m3u8_url, headers=self.headers)
        p='%s/'%self.path + '%s.txt' %self.name  #文件存储路径名称
        f = open(p, 'wb+')
        f.write(r.content)
        f.close()
        print('m3u8文件下载完毕!')
        print('开始读取m3u8文件。。。')
        f = open(p , 'r')
        file = f.readlines()
        f.close()
        print('m3u8文件读取完毕!')
        for i in file:
            if 'ts' in i:
                ur=self.ts_half_url+i.replace('\n', '')#'https://iqiyi.qq-zuidazy.com/20190621/12582_32c41930/800k/hls/'+i.replace('\n', '')
                yield ur  #获得所有ts文件真实地址

    def download_ts(self, url):
        print('开始下载第%s个视频碎片' % (self.num))
        r = self.session.get(url, headers=self.headers)
        f = open('%s/' %self.path + '%s' % (self.num) + '.mp4', 'wb')
        f.write(r.content)
        f.close()
        print('第%s个视频碎片下载完毕!' % (self.num))
        self.num += 1

    def compose_mp4(self):
        print('开始合成视频。。')
        f=open('%s.mp4'%self.path,'ab+')
        for path in self.get_all_mp4_slice():
            with open(path,'rb') as ff:
                fff=ff.read()
                f.write(fff)
        f.close()
        print('视频合并完成!')
        if os.path.exists(self.path):
            shutil.rmtree(self.path, True)
        print('视频碎片已删除!')

    def get_all_mp4_slice(self):
        '''获得本地下载的所有ts文件地址'''
        n=self.is_downloaded_mp4()
        for i in range(n):
            yield '%s/'%self.path + '%s' % (i + 1) + '.mp4'

    def is_downloaded_mp4(self):
        for root, dirs, files in os.walk(self.path):
            return len(files)

if __name__ == '__main__':
    #解析网址:https://www.administratorw.com/video.php?url=
    url='https://www.iqiyi.com/v_19rr7q1fyc.html?vfrm=pcw_playpage&vfrmblk=G&vfrmrst=80521_like_hover_image10'
    #爱奇艺复仇者联盟3播放网址:https://www.iqiyi.com/v_19rr7q1fyc.html?vfrm=pcw_playpage&vfrmblk=G&vfrmrst=80521_like_hover_image10
    #F12找到m3u8文件,找到网址m3u8_url
    m3u8_url = 'https://yushou.qitu-zuida.com/20180803/10873_88c5ba06/800k/hls/index.m3u8'
    #F12找到ts文件网址,打开m3u8文件查看给的ts地址格式,可能给一般,可能给全部
    ts_half_url=' https://yushou.qitu-zuida.com/20180803/10873_88c5ba06/800k/hls/'
    Download_ts(url,m3u8_url,ts_half_url)













    


运行结果如图:
潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第5张图片

潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第6张图片
潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第7张图片
如图,视频碎片均合并为MP4文件,并删除了视频碎片的文件夹。
潇洒郎:爬虫爱奇艺、优酷、腾讯VIP视频解析并下载思路:借用解析网站解析VIP,批量下载ts文件,并自动合并所有ts文件_第8张图片
各位大神可以自己改编一下,进行批量下载获取网址以及进行批量下载VIP视频。可以进行**多进程多线程下载,提高下载效率,相关知识可以到我的博客中自行查看。
也可以调用tkinter模块改编成为可视化软件,进行VIP视频下载。tkinter模块我的博客中也有运用。如编译可视化
图片格式转换大师**。
很开心与各位大神共享。如有不足请多多指点。

你可能感兴趣的:(爬虫VIP视频)