乐趣区

关于python爬虫:爬虫加密字体解密

在爬取文本信息过程中 遇到字体是加密的
须要把 方块数字 转换为十进制
再依据 woff 文件中的映射关系进行对应转换
须要留神的是这个字体文件 url 是 每距离几分钟就变动的 如发现和上一次申请的地址不一样 须要再次申请 新的 woff 文件
具体代码如下

from fontTools.ttLib import TTFont

if __name__ == '__main__':

    # 1 依据剖析进去的关系,初始化 把 cmap 中的 name 与 网页显示文本映射关系
    relation_table = {'period': '.', 'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5',
                      'six': '6', 'seven': '7', 'eight': '8', 'nine': '9'
                      }

    # 2 获取到提取到的 UTF-8 的值
    text = '𘢗𘢔𘢘𘢑𘢑𘢙𘢑'

    # 3 下载文件并且获取文件中的 cmap 映射,上面简化案例假若曾经获取到了字体文件
    # cmap=  {100233: 'period', 100235: 'three', 100236: 'seven', 100237: 'six', 100238: 'nine', 100239: 'five', 100240: 'eight', 00241: 'two', 100242: 'one', 100243: 'four', 100244: 'zero'}
    font = TTFont('nxCOAYDu.woff')
    cmap = font.getBestCmap()

    # 4 转换逻辑
    print(f'begin convert:text is {text}')
    text_list = list(text)
    for index, ch in enumerate(text_list):
        en_number = cmap.get(ord(ch), None)
        if en_number:
            alpha_str = relation_table.get(en_number, None)
            if alpha_str:
                text_list[index] = alpha_str
    text_final = ''.join(text_list)
    # 最初输入的就是页面上的数字
    print(f'end convert:text is {text_final}')
    
退出移动版