美文网首页编程地带编程网赚
爱奇艺视频下载爬虫

爱奇艺视频下载爬虫

作者: MA木易YA | 来源:发表于2019-01-18 21:13 被阅读0次

        我先声明一下,这里也是用的外部VIP解析接口,并不是自己抓包获取真实链接,捡个漏学习一下

        我们去爱奇艺随便找个视频

    image.png
        小编也尝试过去数据包里面找数据,但是无果,去网上寻找大神方案时也尽是这种调用接口实现的,小编也就去尝试了一下 image.png
        大家可以直接搜索VIP解析就能看到一些常用的解析网站,这里我使用的是VIP视频破解,这里算是比较之下相对稳定一点的了,这个网站只提供破解不提供接口,但是各个之间的原理性基本上都差不多,用这个做测试其他的基本上就不难理解了
    image.png
        播放后打开检查查看就不难发现规律了,也可以打开几个链接(这里会直接下载到本地——ts文件,可直接播放)查看,基本上就是右边这一串,将整个视频分段截取,我们逐段获取拼接就可以了
    image.png
        这里需要对数字做一下递增以及精确度处理,后者其实可以直接使用字符串方法处理,但是为了更明确一点我这里还是用函数进行了拼接,简单一点
    
    def numFormat(num):
        if len(str(num)) == 1:
            num = '00'+ str(num)
        elif len(str(num)) == 2:
            num = '0' + str(num)
        return num
    
    

    完整代码

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    '''
    @author: maya
    @software: Pycharm
    @file: aqiyi.py.py
    @time: 2019/1/18 18:52
    @desc:
    '''
    import requests
    from lxml import etree
    
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3493.3 Safari/537.36'
    }
    def getHtml(url):
        try:
            r = requests.get(url, headers=headers)
            r.encoding = r.apparent_encoding
            return r.content
        except:
            return ""
    
    def download(num = 0):
        print("********     开始下载    ********")
        while True:
            url = 'http://acfun.iqiyi-kuyun.com/20181213/HvdhFyz7/1000kb/hls/3A1XxdV7816{}.ts'.format(numFormat(num))
            print("开始下载第{}段:{}".format(num, url.split('/')[-1]))
            response = getHtml(url)
            title_url = 'https://www.iqiyi.com/v_19rre80q80.html#vfrm=2-4-0-1'
            title = etree.HTML(getHtml(title_url)).xpath('//span[@id="widget-videotitle"]/text()')[0]
            if response:
                with open(title+'.ts', 'ab') as f:
                    f.write(requests.get(url, headers=headers).content)
                num += 1
            else:
                print("下载结束")
                break
    
    
    def numFormat(num):
        if len(str(num)) == 1:
            num = '00'+ str(num)
        elif len(str(num)) == 2:
            num = '0' + str(num)
        return num
    
    if __name__ == '__main__':
        download()
    

        但是也发现了一些问题,虽然下载下来可以播放了,代码这里一直运行下去之后可能会面临内存崩溃的问题,大家可以用多线程或者异步处理一下,而且视频本身也有点卡顿,可能对于追加过程没处理好,不知道是解析网站的问题还是代码本身的问题,之后再解决吧,先简单实现了,大家有好的意见可以留言

    • 更多爬虫代码详情查看Github

    相关文章

      网友评论

        本文标题:爱奇艺视频下载爬虫

        本文链接:https://www.haomeiwen.com/subject/gqsodqtx.html