我先聲明一下,這裏也是用的外部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