爬虫系列学习之爬取西瓜视频"/>
爬虫系列学习之爬取西瓜视频
前段时间面试题目中居然出现了:破解西瓜视频地址,获取可直接下载视频的地址。
使用工具
- Python 3.7.0
- requests库
- re库
- base64库
分析过程
确定视频资源下载地址
由于之前没有这方面的项目经历,在网上查找资料后,这篇文章给了我灵感(原来西瓜视频上的Url是经过Base64加密的),那么是如何确定西瓜视频上的Url是经过Base64加密的呢?
- 这个字符串仅有64个字符(A~Z a~z + / )以及后缀=组成
- 将目标字符串解密后再将解密字符串加密回去与原来的值做比较如果相同就是Base64
import requests
import re
from base64 import b64decode, b64encodeurl = ''headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}resp =requests.get(url=url, headers=headers)ex = '''"main_url":"(.*?)"'''def doCheck(source):if bytes(source, encoding='utf-8') == b64encode(b64decode(source)):return Truereturn Falseif doCheck(re.findall(ex, resp.text)[0]):print('该Url是Base64加密!!!')
else:print('该Url不是Base64加密!!!')
下载测试
import requests
import re
from base64 import b64decode, b64encodeheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}url = ''resp =requests.get(url=url, headers=headers)ex = '''"main_url":"(.*?)"'''def doCheck(source):if bytes(source, encoding='utf-8') == b64encode(b64decode(source)):return Truereturn Falsedef getVideoUrl(source):return b64decode(source).decode('utf-8')source =re.findall(ex, resp.text)[0]if doCheck(source):resp = requests.get(url=getVideoUrl(source), headers=headers)with open('./Video.mp4', 'wb') as fp:fp.write(resp.content)
else:print('该Url不是Base64加密!!!')
运行结果
更多推荐
爬虫系列学习之爬取西瓜视频
发布评论