专栏首页凹凸玩数据破解X眼电影字体动态加密|凹凸玩数据

破解X眼电影字体动态加密|凹凸玩数据

我们在上一篇文章 《破解大众点评的字体加密》中提到了,大众点评只是静态字体加密,这次我们抱着学习的态度以猫眼电影为例讲讲如何破解字体动态加密。

没有了解过字体加密的小伙伴可以先看看上一篇,本文与上一篇重复的部分就不细讲了。

我们打开猫眼电影票房榜单的首页

https://maoyan.com/board/1

很明显,猫眼电影的榜单进行了字体加密。

让我们回忆一下破解大众点评的步骤:

1、下载网站font字体包

2、将font字体包中导入FontEditor 观察得到乱码与数字的关系

3、前缀替换,并将字体名字和它们所对应的乱码构成一个字典

4、根据字典将加密的数字替换

然而,右键刷新页面,字体文件一直在变:

为了探究一下,我们随便下载3个字体文件,对比看看能不能发现其中的规律。

分别重命名为A.woff,B.woff,C.woff,将他们依次导入FontEditor中打开

其中A字体的1对应的是【uniECC8】

B字体的1对应的是【uniE5FD】

C字体的1对应的是【uniEE6C】

并无规律。

我们再将.woff文件转换成.xml文件,看看字体结构有没有相似之处:

#.woff文件转换成.xml文件
from fontTools.ttLib import TTFont
font = TTFont('./.woff')
font.saveXML('A.xml')

每一个编码都对应一个TTGlyph对象,而许多行的XY坐标点最终绘制成数字。

很多网上的教程到这里就结束了,因为按理说这三个字体的统一数字对应的XY坐标应是一样的。

这说明猫眼最近又新挖了一个坑,继续填坑。

看看上面的三个图,其实他们的XY坐标差异并不大。

所以我们允许在一定范围内的差异就算一样就好啦。

由于有负数,通过abs函数取绝对值

#对比两个坐标的差异
def compare(AA, BB):
    for i in range(5):
        if abs(AA[i][0] - BB[i][0]) < 80 and abs(AA[i][1] - BB[i][1]) < 80:
            pass
        else:
            return False
    return True
#True则可视为是同一个字

这样我们就以某字体基准,无论现在实时的字体是哪一个,只要下载下来,再与该字体进行坐标差异对比,相似的就是同一数字。

在网上找了一张思路图,方便大家理解:

我们下面尝试一下:

1、将新下载的字体文件与base_font对比,找到对应关系

2、前缀替换,并将字体名字和它们所对应的乱码构成一个字典

3、根据字典将加密的数字替换

# 字体解密 
def modify_html(newFont, html):
    basefont = TTFont('./base_font.woff')
    unilist = newFont['cmap'].tables[0].ttFont.getGlyphOrder()
    numlist = []
    base_num = ['6', '3', '7', '1', '5', '9', '0', '4', '2', '8']
    base_unicode = ['uniF0DA', 'uniE907', 'uniED01', 'uniEAE1', 'uniF206',
                   'uniE455', 'uniF401', 'uniE19C', 'uniEB76', 'uniF855']
    for i in range(1, len(unilist)):
        newGlyph = newFont['glyf'][unilist[i]].coordinates
        for j in range(len(base_unicode)):
            baseGlyph = basefont['glyf'][base_unicode[j]].coordinates
            if compare(newGlyph,baseGlyph):
                numlist.append(base_num[j])
                break
    rowList = []
    for i in unilist[2:]:
        i = i.replace('uni', '&#x').lower() + ";"
        rowList.append(i)

    dictory = dict(zip(rowList, numlist))
    for key in dictory:
        if key in html:
            html = html.replace(key, str(dictory[key]))
    return html
# 返回解密后的html

4、利用正则表达式获取数据

# 正则
def parse_page(html):
    pattern = re.compile('<dd>.*?board-index-.*?>(.*?)</i>.*?data-src="(.*?)".*?'
                         + 'title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>.*?'
                         + 'realtime".*?stonefont">(.*?)</span>.*?'
                         + 'total-boxoffice".*?stonefont">(.*?)</span>.*?</dd>', re.S)

    items = re.findall(pattern, html)
    data = pd.DataFrame(items,columns=['index','image','title','star','releasetime','realtime','total-boxoffice'])
    data['star']=data['star'].str[3:]
    data['releasetime']=data['releasetime'].str[5:]
    print(data)
    return data

运行一下。

get。

本文相关爬虫代码,仅供学习交流:https://t.zsxq.com/RVn6qBU

本文分享自微信公众号 - 凹凸数据(alltodata),作者:朱小五

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 破解大众点评的字体加密,这一篇就够了。

    之前写过一篇最火的文章,《中国撸串指北:13万家烧烤店的吃货最爱》,就属于第一种。

    朱小五
  • Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析

    这是kaggle上的一份巴西传统线下汽车服务类连锁店的实际销售数据,大小约3.43G,包含了从2017年3月31日到2020年4月1日大约2600万多的销售数据...

    朱小五
  • Pandas官方文档(中文版)

    Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。学习Panda...

    朱小五
  • python处理猫眼字体动态加密

    本文仅从技术层面进行讨论,在使用程序获取互联网上数据时,请务必遵守数据提供方的使用协议,以免造成侵权。

    Crossin先生
  • Web 字体 font-family 再探秘

    该篇文章基本没有太多移动端的字体选择及分析。并且过了这么久,如今的 Web 字体又有了一些新的东西,遂有此文。

    Sb_Coco
  • 【CSS】955- 你该知道的字体 font-family

    该篇文章基本没有太多移动端的字体选择及分析。并且过了这么久,如今的 Web 字体又有了一些新的东西,遂有此文。

    pingan8787
  • 网络字体@font-face 如何处理网页中的特殊字体

    HTML5学堂:随着网页的发展,网页中出现了越来越多的字体种类,网页自带的微软雅黑、宋体、黑体已经越来越难以满足设计的需要,那么,如何在网站中使用比较特殊的字体...

    HTML5学堂
  • 自定义 Windows PowerShell 和 cmd 的字体

    2017-11-22 16:26

    walterlv
  • vs code terminal 字体过大、字体间距过大 怎么处理

    在Features中找到terminal,然后找到字体的相关设置,可以搜索font查找:

    acoolgiser
  • 聊聊小程序打赏的事

    花叔在个人技术公众号里写了一篇关于小程序打赏的文章,也许内部同学也有做小程序打赏功能的需求,于是特意转过来一下,希望对大家有用。

    花叔

扫码关注云+社区

领取腾讯云代金券