爬取网络视频-未完待续

'''
下载电影
https://www.ai66.cc/zhanzhengpian/14490.html
'''
import os
import time
RESPATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'res')
import requests
from urllib import parse
from requests.packages.urllib3.exceptions import InsecureRequestWarning
class Movie:

    def download_m3u8_files(self,url):
        r = requests.get(url)
        lines = r.text.split('\n')
        tss = []
        for line in lines:
            if line.endswith('.ts'):
                tss.append(parse.urljoin('https://www.nmgxwhz.com:65',line))
            return

    def heBingTsVideo(self,download_path, hebing_path):
        all_ts = os.listdir(download_path)
        with open(hebing_path, 'wb+') as f:
            for i in range(len(all_ts)):
                ts_video_path = os.path.join(download_path, all_ts[i])
                f.write(open(ts_video_path, 'rb').read())
        print("合并完成!!")

    def down_tss(self,tss,name):
        # 下载ts文件
        global RESPATH
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
        }
        file_name = os.path.join(RESPATH,name)
        if os.path.exists(file_name):
            return
        os.makedirs(file_name)
        all = len(tss)
        for idx,url in enumerate(tss):
            print('{}/{}'.format(idx+1,all))
            downsize = 0
            startTime = time.time()
            requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
            req = requests.get(url, headers=headers, stream=True, verify=False)
            with(open(file_name+'/'+str(idx) + '.ts', 'wb')) as f:
                for chunk in req.iter_content(chunk_size=10000):
                    if chunk:
                        f.write(chunk)
                        downsize += len(chunk)
                        line = 'downloading %d KB/s - %.2f MB, 共 %.2f MB'
                        line = line % (
                            downsize / 1024 / (time.time() - startTime), downsize / 1024 / 1024, downsize / 1024 / 1024)
                        # print(line)
    def run(self):
        name = '金刚川'
        # m3u8_url = 'https://www.nmgxwhz.com:65/20201209/vq2N4ajW/1200kb/hls/index.m3u8'
        # tss = self.download_m3u8_files(m3u8_url)
        # self.down_tss(tss, name)

        self.heBingTsVideo(os.path.join(RESPATH,name), os.path.join(RESPATH,name+'.mp4'))
if __name__ == '__main__':
    Movie().run()

 

在Java中,泛型是一种强类型机制,它可以让你在编译时检查类型错误,从而提高代码的安全性和可读性。在使用泛型时,我们经常会遇到父类和子类的泛型转换问题。 首先,我们需要明确一点:子类泛型不能转换成父类泛型。这是因为Java中的泛型是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类泛型转换成父类泛型,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类型,包括父类和子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类型。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 总结一下,Java中的泛型是不协变的,子类泛型不能转换成父类泛型。如果需要实现子类泛型转换成父类泛型,可以使用通配符来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值