需求:
最近有某朋友需要下载美拍视频并提取视频当中的音频。地址为http://www.meipai.com/media/457569009。
方法:
第一次看美拍的视频,网上搜索一下,发现有一些方法说看源代码中,可以看到视频地址。
打开分析后发现视频地址,发现url并不是直观的url,以前的方法已经不能使用了。
地址为:8141aHR0chDovL212dmlkZW8xMS5tZWl0dWRhdGEuY29tLzU2OGI3NzQyODc2MzY2MTQ4Lm1w8vwYNA==
判定为base64加密,对数据进行解密
发现解密后完全不认识,但是能看到htt的字样,那说明在base64的过程中还做了其他的处理(可能进行了移位等操作)
此时不能放弃,我们多次请求该网页后,发现url的base64值是不同的,这里应该就是对url在base64编码之前进行了某种移位的操作(猜测,具体没有去验证)。
多次请求后,发现如下
可以看到解码后的url为较正常的,我们尝试一下mvvideo11.meitudata.com/568b7742876366148.mp4
确实就是视频的真实地址,丢到下载器里面下载即可。
脚本:
lcamry格言:手工超过三分钟的活就要脚本自动化实现。
#!/usr/bin#-*- coding: utf-8 -*-#DATA:2017年5月20日#AUTHOR:lcamry#blog:http://www.cnblogs.com/lcamry#link:#qq:646878467#usag:python download-meipai-video.py http://www.meipai.com/media/730173228import sys,osimport urllib2import base64try: from lxml import htmlexcept ImportError: raise SystemExit("lxml module is wrong,please execute:pip install lxml")class submain(): def __init__(self,submain): self.submain = submain self.sublist = [] def get_sourceurl(self): for i in range(0,20): scan_data = urllib2.urlopen(self.submain).read() html_data = html.fromstring(scan_data) submains = html_data.xpath("//span//@data-video") self.sublist.extend(submains) # print self.sublist def scan_domain(self): self.get_sourceurl() return list(set(self.sublist))if __name__ == '__main__': domain = sys.argv[1] submain = submain(domain).scan_domain() for line in submain: if len(line) % 4 ==0: try: print base64.decodestring(line) except: continue
执行结果下:
从上图可以看到mvvideo11.meitudata.com/568b7742876366148.mp4这个地址就是视频的完整地址,此时我们用浏览器访问一下,视频地址正确。
notice:
需要说明的是,我们此处是对URL相当于爆破的,所以在一次执行后,可能没有正确的结果,此时多执行几次,每次返回的结果是不同的,然后自己判断返回的地址中就可以找到正确的地址。