我先声明一下,这里也是用的外部VIP解析接口,并不是自己抓包获取真实链接,捡个漏学习一下
我们去爱奇艺随便找个视频

小编也尝试过去数据包里面找数据,但是无果,去网上寻找大神方案时也尽是这种调用接口实现的,小编也就去尝试了一下

大家可以直接搜索VIP解析就能看到一些常用的解析网站,这里我使用的是VIP视频破解,这里算是比较之下相对稳定一点的了,这个网站只提供破解不提供接口,但是各个之间的原理性基本上都差不多,用这个做测试其他的基本上就不难理解了

播放后打开检查查看就不难发现规律了,也可以打开几个链接(这里会直接下载到本地——ts文件,可直接播放)查看,基本上就是右边这一串,将整个视频分段截取,我们逐段获取拼接就可以了

这里需要对数字做一下递增以及精确度处理,后者其实可以直接使用字符串方法处理,但是为了更明确一点我这里还是用函数进行了拼接,简单一点
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
网友评论