是加密的,解密方法在JS里面可以弄出来。
首先要AES解密,可以Python:import Crypto.Cipher.AES包,解密mode是CFB,seed是"userId:"+uid+":seed"的SHA256值,解密的key是seed[0:24],iv是seed[len(seed)-16:]。
如果没有登录,uid就是用的"anyone",这时候的seed是"61581AF471B166682A37EFE6DD40FE4700EE337FEEEF65E2C8F203FCA312AAAB",也就是key为"61581AF471B166682A37EFE6",iv为"C8F203FCA312AAAB"。
解密后文件是压缩过的,解压即可得到一个JSON。这部分解压我没仔细看他的算法,好像是gzip,直接用Python:import gzip解压有点出错,可能没用对或者不是这个算法,你在研究一下。第二种投机的方法就是,可以通过Python:import execjs直接调用他的pako.js文件的JS的inflate()函数来解压这块。JS代码混淆后看起来是非常难懂的,使用这种做法可以不用太看懂加密的算法,效率当然写Python实现这个解密算法低1点咯。
最后的JSON再用Python:import demjson解析,text的value就是文档。
以下代码运行通过:
import?requestsfrom?bs4?import?BeautifulSoup
import?os
headers?=?{
??'User-Agent':?"Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.1?(KHTML,?like?Gecko)?"
?????????"Chrome/22.0.1207.1?Safari/537.1"}
##?浏览器请求头(大部分网站没有这个请求头会报错)
all_url?=?'mzitu/all'
start_html?=?requests.get(all_url,?headers=headers)
##?使用?requests?中的?get?方法来获取?all_url?的内容?headers?为请求头
print(start_html.text)
##?打印?start_html
##?concent?是二进制的数据,下载、视频、音频、等多媒体内容时使用?concent
##?打印网页内容时使用?text
运行效果: