大众点评字体反爬

可以看到字体是一个个的框,用了自定义的字体文件。

把字体文件下载到本地

源码中是这样显示的:

字体文件下载到本地,安装FontCreator以后打开来看看,是这样的:

很容易看出来源码中的是uniee22

接下来就是编码和字符之间的对应关系,这一步需要人工录入它们之间的对应关系(PS:一个偷懒的办法是在FontCreator中打开字体文件,复制unicode编码,然后隐藏unicode,把字符图片截屏,用在线识图OCR工具识别出来,粘贴在一起,比一个个录入快多了)。

但是,字体文件会变化,这个编码对应关系可能下次就对不上了,怎么办?

先来看看字体文件到底是个什么东西。

用fontTools把woff格式的字体文件转换为xml文件,

from fontTools.ttLibimport TTFont

font = TTFont('3f219bb4.woff')  # 打开本地字体文件3f219bb4.woff

 font.saveXML('local.xml')  # 将ttf文件转化成xml格式并保存到本地,主要是方便我们查看内部数据结构

可以看到,相当于每个unicode编码对应一幅图,字符是画出来的,以下是点阵中的坐标

所以字体编码虽然变化,但是字的写法是不变的,也就是它所对应的一系列x,y坐标参数是不变的。

然后可以在本地写上当前unicode和字符的对应关系,再把网页中的unicode对应的坐标与本地的作比较,从而得出其对应的字符。

# 比较两个编码对应的坐标是否相同

def compare(l1,l2):

    if(len(l1)!=len(l2)):

return False

else:

        mark= 1

        for iin range(len(l1)):

            if abs(l1[i][0]-l2[i][0])<40 and abs(l1[i][1]-l2[i][1])<40:

pass

else:

                mark=0;

break

        return mark

#传入网页的字体文件路径和要解析的编码字符,返回解码字符

def getString(fontpath,code):

    # 手动确定编码和字符的对应关系

    u_list= ['unied12', 'unie998', 'uniedc9', 'uniefe9', 'unif280', 'unie200', 'uniefaf', 'unif1ec', 'unie728',

              'unif008', 'unieeec', 'uniecfc', 'unif682', 'uniec45', 'unif1d9', 'unie30d', 'unie319', 'unif08b',

              'unif3c3', 'uniea07', 'uniea37', 'uniea39', 'uniec5a', 'unif88b', 'unief34', 'unieaad', 'uniedb2',

              'unieec2', 'unie6c9', 'unie4ff', 'unif50f', 'unie32d', 'unie568', 'unied32', 'unif89d', 'unif2c6',

              'unie1a6', 'unie1df', 'unif14f', 'uniefb3', 'unif343', 'unie099', 'unieb02', 'unie029', 'unieb43',

              'uniebb3', 'unie210', 'unie303', 'unief92', 'unif0fa', 'unie614', 'unie5eb', 'uniea70', 'unif64b',

              'unie2b2', 'unie73d', 'unie0c9', 'unie810', 'unif084', 'unie765', 'unie1d6', 'unie4f4', 'uniec47',

              'unie231', 'unif5f3', 'unif4db', 'unif454', 'uniebeb', 'uniee93', 'unie251', 'unif0cc', 'uniecc7',

              'unie4ba', 'unieeb8', 'unif50a', 'unif00b', 'unie36b', 'unif308', 'unief72', 'unie2ec', 'unieed3',

              'unie5cf', 'unif801', 'unif37d', 'unie84a', 'uniedb6', 'unied22', 'unie938', 'uniee20', 'unie77f',

              'uniec02', 'unieee7', 'unif4dc', 'unie5f5', 'unif7b0', 'unie9c5', 'unie822', 'unif7aa', 'unif493',

              'unie013', 'unif022', 'unie286', 'unieff9', 'uniebb1', 'unief9c', 'unie793', 'unie885', 'unif693',

              'uniecf5', 'unie8e3', 'unif09e', 'unie26b', 'unie1ea', 'unied28', 'unie7b9', 'unif527', 'unieeee',

              'unieb34', 'uniebc0', 'unie734', 'unif6c4', 'uniecd5', 'unie71f', 'unie328', 'uniefdc', 'unie5ea',

              'unie15c', 'unif843', 'unif002', 'unie841', 'unie8d1', 'uniefb4', 'unie949', 'unif06d', 'uniec78',

              'unie10b', 'unif54d', 'unif8b2', 'unif273', 'unie69d', 'uniebf7', 'unif108', 'unie278', 'unie3ed',

              'unif853', 'unieac3', 'unif57f', 'unif160', 'unif484', 'unif6dc', 'unief8c', 'uniee17', 'unief78',

              'unif242', 'unif5ef', 'unif688', 'unie415', 'unie963', 'unieacf', 'unie4a9', 'unif15b', 'unif0dc',

              'uniee5b', 'unie184', 'unieb6e', 'unif1ba', 'unie41b', 'unif013', 'unieab7', 'unif074', 'unie584',

              'uniebd2', 'unif3fa', 'uniea53', 'unif611', 'unie29a', 'unieebc', 'unie993', 'unie271', 'unif389',

              'unie19e', 'uniee6d', 'uniec20', 'unif052', 'unif6fa', 'unif6e2', 'unie9bc', 'unie9d1', 'unif7ec',

              'unif140', 'uniee56', 'unie724', 'unie2b7', 'unie596', 'unif8db', 'unie8ba', 'unif2bb', 'unie351',

              'unieca5', 'unie6a9', 'unif504', 'unied4e', 'unif4ad', 'unie641', 'unieaa2', 'unie12a', 'unie1fb',

              'unie49b', 'unie424', 'unie52a', 'unieda4', 'unief74', 'unif6c9', 'unif5e5', 'unie338', 'unie408',

              'unie682', 'unie82c', 'unie926', 'unie5d2', 'unie060', 'unie927', 'unie0e5', 'uniee7a', 'unif128',

              'unie7a9', 'unie2d7', 'unif7f6', 'unif425', 'unie6d8', 'unif579', 'unif808', 'unie83e', 'unif63b',

              'uniec33', 'unie4e9', 'unie6c0', 'unief32', 'unieb2f', 'unie6f5', 'unie4e2', 'unif820', 'unif121',

              'unie809', 'unif56c', 'unie909', 'unif193', 'unie8ab', 'unieb3a', 'unif1a7', 'unie562', 'unif18f',

              'unie6ed', 'unif885', 'unieca4', 'unif422', 'unif212', 'unief86', 'unie18f', 'unie7c8', 'unif55f',

              'unif28f', 'unif443', 'unie1e2', 'unif391', 'unif4e0', 'uniea09', 'unie866', 'unied8d', 'unie9e4',

              'unie28a', 'unie989', 'unif804', 'unif344', 'unief05', 'unie9a1', 'unie0be', 'unie341', 'unie1a9',

              'unie0a5', 'unif507', 'unif8b0', 'unie48f', 'unie7e0', 'unif0a6', 'unie8b2', 'unif740', 'uniee4a',

              'unie68f', 'unie683', 'unie746', 'unif099', 'unif252', 'unie119', 'unif720', 'unie0fb', 'unief65',

              'unie2c3', 'unied62', 'unief1e', 'uniebe9', 'unie2d9', 'unie31b', 'unif6f8', 'unie499', 'unif1f1',

              'unif656', 'unieb46', 'unie7d5', 'unie9a9', 'unie9ff', 'unie6f3', 'unie729', 'unie90c', 'unie2f4',

              'unie145', 'unie3e9', 'unie8e8', 'unief0c', 'unif27f', 'unie441', 'unif435', 'uniebee', 'unif70e',

              'unie633', 'unif6aa', 'uniebb9', 'unie8c1', 'unie713', 'unie220', 'unif077', 'uniebe4', 'unie9c6',

              'unie67c', 'unif8a0', 'unif671', 'unif408', 'unif88f', 'unif228', 'unief52', 'unif2fb', 'unieb36',

              'unie7ea', 'unie93c', 'unie64d', 'unif68f', 'uniea4c', 'unie6e4', 'unie1b2', 'unie508', 'unif4dd',

              'unie00e', 'unie0a8', 'unie2a9', 'unif4a2', 'uniec73', 'uniee11', 'unif307', 'unif5da', 'unie6cd',

              'unieae2', 'unif23d', 'unie5b1', 'unie1db', 'unieb24', 'unie9e7', 'uniec93', 'unif857', 'unie020',

              'unie0af', 'unie78b', 'unif247', 'unie451', 'unif2cd', 'unie06e', 'unie414', 'unie775', 'unie5db',

              'unif7ab', 'unie75a', 'unie6bb', 'unif852', 'unif6b9', 'uniea1a', 'unie96d', 'unieb44', 'unif59b',

              'unie8a8', 'unie9f7', 'unif465', 'unif345', 'unieebb', 'unif264', 'unie9b2', 'unif095', 'unie88c',

              'uniebc9', 'unie28c', 'uniec98', 'unie006', 'unif4c5', 'unie042', 'unie314', 'unie26c', 'unie113',

              'unieb8e', 'uniee3f', 'unie7b6', 'unif5ea', 'unif65c', 'unif81b', 'unie752', 'unif13a', 'unie7c4',

              'unie35a', 'unie69e', 'unif7d5', 'unif69a', 'unif5ba', 'unie5dc', 'unif5e6', 'unie600', 'unieaa1',

              'unie5ec', 'unie0f4', 'unif3b8', 'unie607', 'unif127', 'unied7a', 'unif2c8', 'unie9d3', 'unie5e8',

              'unief53', 'unied74', 'unieb7f', 'uniefb0', 'unie7f3', 'unie5a4', 'unie379', 'unie43b', 'uniee18',

              'unif00a', 'unie2a7', 'unif5ab', 'unied11', 'uniea62', 'unif651', 'unie253', 'unif8ec', 'unif78f',

              'unif3e0', 'uniee49', 'unie496', 'unieced', 'unif8a1', 'unif5a5', 'unif02a', 'uniebc3', 'uniec0d',

              'unie37c', 'unie2e3', 'unie1e6', 'unie1dc', 'unieece', 'unie9b8', 'unie8a0', 'unif53d', 'unie4b3',

              'unif4a1', 'unif7c9', 'unif26e', 'uniee48', 'unif5e1', 'unie771', 'unif67f', 'unie5dd', 'unie69f',

              'unif2ea', 'unif27e', 'uniecfb', 'unif811', 'unie92a', 'unif8c6', 'unie7fa', 'unie083', 'unie754',

              'unief15', 'unie0b8', 'unie0f9', 'unif2b2', 'unie9e9', 'unif224', 'unie144', 'unif08a', 'unif7ff',

              'unif5f4', 'unif342', 'unie0ea', 'unieb99', 'uniefbc', 'unif6a4', 'unie6aa', 'unie005', 'unif3bf',

              'unif365', 'unie4f9', 'unie81e', 'unie911', 'unied0f', 'unif187', 'unie71a', 'unie824', 'unie566',

              'unif125', 'unie8d3', 'unif54f', 'unif4b0', 'unif6d1', 'unie8a4', 'unif402', 'unie6fb', 'unif4e2',

              'unied7e', 'unif7d9', 'unie964', 'unieffb', 'unie5a0', 'unif637', 'unie17a', 'unif4b5', 'unif0f3',

              'unif2c9', 'unie336', 'unie75e', 'unie4b8', 'unieb8a', 'uniebca', 'unif183', 'unie843', 'unif888',

              'unif796', 'unie239', 'unie3ec', 'unie5ca', 'unie1a8', 'unieb94', 'unie443', 'unie946', 'unif760',

              'unif791', 'unif815', 'unief61', 'unif07d', 'unie3b3', 'unif36f', 'unif021', 'unie0d5', 'unif1b6',

              'unief14', 'unieb55', 'unif3cb', 'unif788', 'unie672', 'unie6e5', 'unieacb', 'unieb04', 'unif473',

              'unif624', 'unie14b', 'unie96c', 'unie762', 'unied05', 'unif58f', 'unif225', 'unif0eb', 'unie32f',

              'unie6dc', 'unie86c', 'unie974', 'unieba0', 'unif583', 'unie3b1', 'unie098', 'uniede4', 'unie575',

              'unif6ad', 'unif634', 'unif72f', 'unif4b8', 'unif5d2', 'unif771', 'unif5e7', 'uniec7a', 'unif7e8',

              'unie077', 'unif056', 'unif066', 'unie506', 'unie0a3', 'unif520', 'unie819']

    word_list= ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '店', '中', '美', '家', '馆', '小', '车', '大', '市', '公',

                '酒', '行', '国', '品', '发', '电', '金', '心', '业', '商', '司', '超', '生', '装', '园', '场', '食', '有', '新', '限',

                '天', '面', '工', '服', '海', '华', '水', '房', '饰', '城', '乐', '汽', '香', '部', '利', '子', '老', '艺', '花', '专',

                '东', '肉', '菜', '学', '福', '饭', '人', '百', '餐', '茶', '务', '通', '味', '所', '山', '区', '门', '药', '银', '农',

                '龙', '停', '尚', '安', '广', '鑫', '一', '容', '动', '南', '具', '源', '兴', '鲜', '记', '时', '机', '烤', '文', '康',

                '信', '果', '阳', '理', '锅', '宝', '达', '地', '儿', '衣', '特', '产', '西', '批', '坊', '州', '牛', '佳', '化', '五',

                '米', '修', '爱', '北', '养', '卖', '建', '材', '三', '会', '鸡', '室', '红', '站', '德', '王', '光', '名', '丽', '油',

                '院', '堂', '烧', '江', '社', '合', '星', '货', '型', '村', '自', '科', '快', '便', '日', '民', '营', '和', '活', '童',

                '明', '器', '烟', '育', '宾', '精', '屋', '经', '居', '庄', '石', '顺', '林', '尔', '县', '手', '厅', '销', '用', '好',

                '客', '火', '雅', '盛', '体', '旅', '之', '鞋', '辣', '作', '粉', '包', '楼', '校', '鱼', '平', '彩', '上', '吧', '保',

                '永', '万', '物', '教', '吃', '设', '医', '正', '造', '丰', '健', '点', '汤', '网', '庆', '技', '斯', '洗', '料', '配',

                '汇', '木', '缘', '加', '麻', '联', '卫', '川', '泰', '色', '世', '方', '寓', '风', '幼', '羊', '烫', '来', '高', '厂',

                '兰', '阿', '贝', '皮', '全', '女', '拉', '成', '云', '维', '贸', '道', '术', '运', '都', '口', '博', '河', '瑞', '宏',

                '京', '际', '路', '祥', '青', '镇', '厨', '培', '力', '惠', '连', '马', '鸿', '钢', '训', '影', '甲', '助', '窗', '布',

                '富', '牌', '头', '四', '多', '妆', '吉', '苑', '沙', '恒', '隆', '春', '干', '饼', '氏', '里', '二', '管', '诚', '制',

                '售', '嘉', '长', '轩', '杂', '副', '清', '计', '黄', '讯', '太', '鸭', '号', '街', '交', '与', '叉', '附', '近', '层',

                '旁', '对', '巷', '栋', '环', '省', '桥', '湖', '段', '乡', '厦', '府', '铺', '内', '侧', '元', '购', '前', '幢', '滨',

                '处', '向', '座', '下', '県', '凤', '港', '开', '关', '景', '泉', '塘', '放', '昌', '线', '湾', '政', '步', '宁', '解',

                '白', '田', '町', '溪', '十', '八', '古', '双', '胜', '本', '单', '同', '九', '迎', '第', '台', '玉', '锦', '底', '后',

                '七', '斜', '期', '武', '岭', '松', '角', '纪', '朝', '峰', '六', '振', '珠', '局', '岗', '洲', '横', '边', '济', '井',

                '办', '汉', '代', '临', '弄', '团', '外', '塔', '杨', '铁', '浦', '字', '年', '岛', '陵', '原', '梅', '进', '荣', '友',

                '虹', '央', '桂', '沿', '事', '津', '凯', '莲', '丁', '秀', '柳', '集', '紫', '旗', '张', '谷', '的', '是', '不', '了',

                '很', '还', '个', '也', '这', '我', '就', '在', '以', '可', '到', '错', '没', '去', '过', '感', '次', '要', '比', '觉',

                '看', '得', '说', '常', '真', '们', '但', '最', '喜', '哈', '么', '别', '位', '能', '较', '境', '非', '为', '欢', '然',

                '他', '挺', '着', '价', '那', '意', '种', '想', '出', '员', '两', '推', '做', '排', '实', '分', '间', '甜', '度', '起',

                '满', '给', '热', '完', '格', '荐', '喝', '等', '其', '再', '几', '只', '现', '朋', '候', '样', '直', '而', '买', '于',

                '般', '豆', '量', '选', '奶', '打', '每', '评', '少', '算', '又', '因', '情', '找', '些', '份', '置', '适', '什', '蛋',

                '师', '气', '你', '姐', '棒', '试', '总', '定', '啊', '足', '级', '整', '带', '虾', '如', '态', '且', '尝', '主', '话',

                '强', '当', '更', '板', '知', '己', '无', '酸', '让', '入', '啦', '式', '笑', '赞', '片', '酱', '差', '像', '提', '队',

                '走', '嫩', '才', '刚', '午', '接', '重', '串', '回', '晚', '微', '周', '值', '费', '性', '桌', '拍', '跟', '块', '调',

                '糕']

    # 读取本地的字体文件

    font1= TTFont("22e96dba.woff")

    be_p1= []

    for uniin u_list:

        p1= []  # 保存一个字符的x,y信息

# 获取对象的x,y信息,返回的是一个GlyphCoordinates对象,可以当作列表操作,每个元素是(x,y)元组

        p= font1['glyf'][uni].coordinates

# 把GlyphCoordinates对象改成一个列表

        for fin p:

            p1.append(f)

        be_p1.append(p1)

    # 读取当前网页的字体文件,已经下载到本地了

    font2= TTFont(fontpath)

    uni_list2= font2.getGlyphOrder()[1:]

    on_p1= []

    for iin uni_list2:

        pp1= []

        p= font2['glyf'][i].coordinates

for fin p:

            pp1.append(f)

        on_p1.append(pp1)

    n2= 0

    x_list= []

    # 字典,当前unicode编码和字符对应关系

    code_dict= {}

    for din on_p1:

        n2+= 1

        n1= 0

        for ain be_p1:

            n1+= 1

            if compare(a, d):

                print(uni_list2[n2- 1] + "=" + word_list[n1- 1])

                code_dict[uni_list2[n2- 1]] = word_list[n1- 1]

                x_list.append(word_list[n1- 1])

    # 返回对应的真实字符

    return code_dict[code]

参考链接:https://blog.csdn.net/xing851483876/article/details/82928607

你可能感兴趣的:(大众点评字体反爬)