爬虫从入门到精通(21) |字体加密通杀方案

文章目录

  • 一、了解什么是字体加密
  • 二、Python打开字体加密文件
  • 三、字体加密的通杀
    • 1.静态的字体文件+固定顺序的字体
    • 2.其他动态变化情况

一、了解什么是字体加密

字体加密是页面和前端字体文件想配合完成的一个反爬策略。通过css对其中一些重要数据进行加密,使我们在代码获取的和在页面上看到的数据是不同的。

在这里插入图片描述

前端人员通过使用font-face来达到这个目的,font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中。而font-face的格式为:

@font-face {font-family: <FontName>;      # 定义字体的名称。             src: <source> [<format>][,<source> [<format>]]*;  # 定义该字体下载的网址,包括ttf,eof,woff格式等
}

我们要打开ttf,eof,woff这些格式的字体文件有两种方式:

  • FontCreator工具:https://www.high-logic.com/font-editor/fontcreator
  • 在线FontEditor工具:http://fontstore.baidu.com/static/editor/index.html

我们抓包一个字体文件,在Font那一列,复制这个url到浏览器就可以下载下来

在这里插入图片描述
下载下来后,我们使用FontCreator打开

在这里插入图片描述

对应页面的数字。页面源码的字符前缀是&#x,woff文件的前缀是uni
在这里插入图片描述

二、Python打开字体加密文件

刚才是直观的看到我们的对应关系,但是我们主要是通过python代码,自动的替换加密字体。这个时候就需要借助其他模块来实现。

pip install fontTools

然后一些常见方法见 https://blog.csdn.net/weixin_43411585/article/details/103484643

这里我们演示打开woff格式的文件。文件下载地址

https://www.python-spider.com/static/font/challenge12/aiding.woff

演示代码

from fontTools.ttLib import TTFont# 加载字体文件
font = TTFont('local.woff')# 保存为xml文件
font.saveXML('local.xml')# 获取各节点名称,返回为列表
print(font.keys())
# ['GlyphOrder', 'head', 'hhea', 'maxp', 'OS/2', 'hmtx', 'cmap', 'loca', 'glyf', 'name', 'post', 'GSUB']# 获取getGlyphOrder节点的name值,返回为列表
print(font.getGlyphOrder())  # ['glyph00000', 'x', 'uniF013', 'uniF4D4', 'uniEE40', 'uniF7E1', 'uniF34B', 'uniE1A0', 'uniF1BE', 'uniE91E', 'uniF16F', 'uniF724']
print(font.getGlyphNames())  # ['glyph00000', 'uniE1A0', 'uniE91E', 'uniEE40', 'uniF013', 'uniF16F', 'uniF1BE', 'uniF34B', 'uniF4D4', 'uniF724', 'uniF7E1', 'x']# 获取cmap节点code与name值映射, 返回为字典
print(font.getBestCmap())  # {120: 'x', 57760: 'uniE1A0', 59678: 'uniE91E', 60992: 'uniEE40', 61459: 'uniF013', 61807: 'uniF16F', 61886: 'uniF1BE', 62283: 'uniF34B', 62676: 'uniF4D4', 63268: 'uniF724', 63457: 'uniF7E1'}# 获取glyf节点TTGlyph字体xy坐标信息
print(font['glyf']['uniE1A0'].coordinates)  # GlyphCoordinates([(50, 335),(50, 468),(76, 544),(95, 638),(148, 676),(202, 710),(282, 710),(402, 710),(459, 617),(487, 574),(504, 501),(520, 437),(519, 335),(520, 271),(508, 166),(494, 126),(466, 46),(362, -39),(282, -49),(176, -35),(115, 37),(43, 121),(43, 335),(135, 335),(135, 154),(177, 95),(229, 35),(282, 35),(343, 35),(385, 107),(428, 155),(428, 339),(428, 515),(385, 576),(344, 635),(286, 635),(218, 635),(179, 583),(135, 506)])# 获取glyf节点TTGlyph字体xMin,yMin,xMax,yMax坐标信息
print(font['glyf']['uniE1A0'].xMin, font['glyf']['uniE1A0'].yMin,font['glyf']['uniE1A0'].xMax, font['glyf']['uniE1A0'].yMax)  # 0 -49 521 711# 获取glyf节点TTGlyph字体on信息
print(font['glyf']['uniE1A0'].flags)  # array('B', [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0])# 获取GlyphOrder节点GlyphID的id信息, 返回int型
print(font.getGlyphID('uniE1A0'))  # 7

生成的xml文件
在这里插入图片描述

三、字体加密的通杀

1.静态的字体文件+固定顺序的字体

这类就是字体文件是固定的,而且坐标不变,字体的顺序也是不变的。这一类我们直接找到映射关系后可以直接写死替换,一劳永逸,也是最简单的字体反爬。

例如从这个网站下载woff文件:https://www.python-spider.com/static/font/challenge12/aiding.woff
,下载完打开woff
在这里插入图片描述
python解析出映射关系,直接replace替换字典

from fontTools.ttLib import TTFontfont = TTFont('./aiding.woff')
font.saveXML('./aiding.xml')
font_names = font.getGlyphOrder()
print(font_names)
woff_dict = {}
for name in font_names[1:]:woff_dict[name.replace('uni', '&#x')] = font.getGlyphID(name) if font.getGlyphID(name) != 10 else 0
print(woff_dict)

在这里插入图片描述

2.其他动态变化情况

这里把不是第一种的统一看成其他

  • 动态字体文件+固定字体顺序
  • 动态字体文件+动态编码+固定字体信息
  • 动态字体文件+动态编码+固定字体信息
  • 动态字体文件+动态编码+动态字体信息

这些的解决办法我们现在有一种大佬想的新方案:

传统的方式就是找到目标ttf 文件,人为得映射乱码和真实字符。但是当ttf更新频繁时,人为对照成本就很高了。针对上面的痛点,想了一种成本较低得方法来解决这个问题。通过调研发现Python 的image类是可以加载字体文件的,那结合机器学习文字识别那就可以很轻松的拿到乱码和字体的映射。现在问题是找到一个靠谱的汉字识别模型。对比市面上的汉字识别模型, 最终采用了cnocr 模型。当然使用模型是有准确率的,最终的结果最好还是自己验证一次。

环境安装:

python : 3.8.8安装cnocr: pip install cnocr
如果报错 :ERROR: Failed building wheel for Polygon3
直接通过whl 安装Polygon3https://www.lfd.uci.edu/~gohlke/pythonlibs/#polygon
即在上述链接中 选择 Polygon3-3.0.9.1-cp38-cp38-win_amd64.whl 下载安装即可在实际执行中发现 cv2找不到 某个函数,不要犹豫,大概率是opencv-python 的差异
建议直接升级到最高版本
pip install --user opencv-python --upgrade

代码演示:

import os
from PIL import ImageFont, Image, ImageDrawfrom cnocr import CnOcr
import numpy as np
from fontTools.ttLib import TTFont
import requests
from io import BytesIOdef font_to_img(code_list, filename, ignore_flag=True, score=0.95):normal_dict = {}be_padding_dict = {}ocr = CnOcr()"""将字体画成图片code_list: 加密字符列表filename: 字体文件ignore_flag:是否忽视 sorce 返回结果score: 识别准确率默认 95%以上"""for char_list in code_list:char_code = char_list.encode().decode()img_size = 1024img = Image.new('1', (img_size, img_size), 255)draw = ImageDraw.Draw(img)font = ImageFont.truetype(filename, int(img_size * 0.7))x, y = draw.textsize(char_code, font=font)draw.text(((img_size - x) // 2, (img_size - y) // 2), char_code, font=font, fill=0)# 将单通道 转为 三通道img = img.convert("RGB")# word = ocr.ocr_for_single_line("%s.jpg" % mame_ocr)word = ocr.ocr_for_single_line(np.array(img))if word["score"] >= score:# 处理重复名字# img.save("%s_%s.jpg" % (char_code, word["text"]))normal_dict[char_code] = word["text"]else:be_padding_dict[char_code] = wordimg.save("%s_%s_be_padding.jpg" % (char_code, word["text"]))if ignore_flag:normal_dict[char_code] = word["text"]return normal_dict, be_padding_dictdef ttf_parse(url, ttf_name):"""根据url 获取返回值"""response = requests.get(url).contentfont_parse = TTFont(BytesIO(response))font_parse.save(ttf_name)m_dict = font_parse.getBestCmap()unicode_list = []for key, _ in m_dict.items():unicode_list.append(key)# 获取需要判断的字符char_list = [chr(ch_unicode) for ch_unicode in unicode_list]normal_dict, error_dict = font_to_img(char_list, ttf_name)print(normal_dict)print(error_dict)# 删除字体文件os.remove(ttf_name)if __name__ == '__main__':ttf_parse('https://s3plus.meituan.net/v1/mss_73a511b8f91f43d0bdae92584ea6330b/font/616c0c0d.woff', '1.jpg')

结果:

{'x': '', '\ue006': '其', '\ue00f': '町', '\ue03a': '觉', '\ue042': '意', '\ue055': '串', '\ue05e': '所', '\ue069': '气','\ue07e': '3', '\ue083': '跟', '\ue084': '旅', '\ue08f': '际', '\ue0d1': '前', '\ue0dd': '费', '\ue0e5': '清','\ue0ee': '成', '\ue0f8': '关', '\ue10b': '宾', '\ue10f': '苑', '\ue11c': '张长', '\ue11e': '楼', '\ue133': '5','\ue143': '临', '\ue154': '笑', '\ue159': '凯', '\ue161': '色', '\ue16c': '拍', '\ue177': '少', '\ue17d': '座','\ue189': '了', '\ue195': '差', '\ue19c': '房', '\ue1b7': '角', '\ue1be': '着', '\ue1d0': '的', '\ue1ea': '自','\ue1ee': '也', '\ue1fc': '要', '\ue20a': '向', '\ue215': '没', '\ue216': '值', '\ue229': '客', '\ue22f': '金','\ue236': '营', '\ue23b': '镇', '\ue247': '衣', '\ue24d': '度', '\ue257': '浦', '\ue26f': '啦', '\ue290': '餐','\ue29f': '情', '\ue2a0': '让', '\ue2bb': '子', '\ue2c3': '纪', '\ue2d8': '于', '\ue2f3': '路', '\ue2f4': '机','\ue2fa': '样', '\ue2fe': '宏', '\ue304': '宝', '\ue336': '横', '\ue337': '因', '\ue338': '人', '\ue33a': '京','\ue34b': '找', '\ue34c': '线', '\ue358': '庆', '\ue36b': '真', '\ue374': '同', '\ue376': '排', '\ue379': '造','\ue37c': '青', '\ue389': '馆', '\ue38e': '寓', '\ue390': '西', '\ue397': '总', '\ue3a0': '特', '\ue3a4': '带','\ue3a7': '校', '\ue3ac': '光', '\ue3ae': '港', '\ue3cf': '春', '\ue3e4': '售', '\ue3f0': '正', '\ue402': '助','\ue406': '香', '\ue40b': '适', '\ue416': '做', '\ue425': '容', '\ue42b': '余科', '\ue430': '讯', '\ue435': '面','\ue440': '舟受', '\ue445': '锦', '\ue44e': '全', '\ue455': '惠', '\ue463': '玉', '\ue467': '窗', '\ue469': '员','\ue487': '代', '\ue488': '学', '\ue492': '我', '\ue495': '都', '\ue498': '9', '\ue49b': '保', '\ue4a0': '铺','\ue4a8': '巷', '\ue4ab': '饭', '\ue4ae': '顺', '\ue4b8': '8', '\ue4ba': '内', '\ue4c3': '栋', '\ue4ce': '发','\ue4f3': '央', '\ue4f7': '器', '\ue4ff': '酸令', '\ue505': '用', '\ue508': '几', '\ue536': '在', '\ue537': '七','\ue53c': '松', '\ue548': '2', '\ue553': '步', '\ue558': '卫', '\ue55e': '古', '\ue55f': '生', '\ue56c': '经','\ue583': '杂', '\ue591': '店', '\ue597': '中', '\ue5b4': '嘉', '\ue5c2': '事', '\ue5c4': '庄', '\ue5c9': '艺','\ue5d3': '无', '\ue5ec': '有', '\ue609': '然', '\ue60c': '谷', '\ue619': '社', '\ue61d': '专', '\ue634': '农','\ue63b': '桌', '\ue63d': '能', '\ue640': '火', '\ue652': '品', '\ue656': '起', '\ue66a': '药', '\ue66b': '喝','\ue66c': '每', '\ue673': '强', '\ue678': '公', '\ue688': '酱', '\ue697': '车', '\ue69b': '接', '\ue6a2': '富','\ue6a7': '式', '\ue6a8': '江', '\ue6ac': '这', '\ue6ae': '美', '\ue6b4': '销', '\ue6b7': '算', '\ue6bd': '打','\ue6e4': '景', '\ue6f2': '且', '\ue724': '材', '\ue730': '湾', '\ue744': '修', '\ue74c': '制', '\ue755': '文','\ue756': '诚', '\ue758': '方', '\ue75a': '司', '\ue76e': '利', '\ue778': '泉', '\ue78d': '名', '\ue792': '东','\ue795': '超', '\ue797': '底', '\ue7a0': '六', '\ue7ad': '字', '\ue7ba': '走', '\ue7be': '个', '\ue7c7': '钢','\ue7d9': '是', '\ue7e4': '岭', '\ue7ff': '博', '\ue80d': '影', '\ue818': '完', '\ue829': '妆', '\ue831': '不','\ue838': '更', '\ue848': '比', '\ue849': '赞', '\ue856': '候', '\ue85b': '安', '\ue85c': '院', '\ue85d': '便','\ue862': '麻', '\ue864': '元', '\ue870': '坊', '\ue88c': '福', '\ue88d': '天', '\ue897': '心', '\ue89e': '太','\ue8ad': '6', '\ue8b9': '与', '\ue8ce': '弄', '\ue8e2': '试', '\ue8ed': '限良', '\ue90d': '康', '\ue916': '省','\ue917': '兴', '\ue91a': '管', '\ue920': '0', '\ue92a': '地', '\ue934': '银', '\ue941': '可', '\ue959': '时','\ue967': '风', '\ue97e': '海', '\ue981': '但', '\ue989': '吉', '\ue990': '堂', '\ue996': '理', '\ue99e': '达','\ue9a3': '胜', '\ue9b8': '年', '\ue9bb': '叉', '\ue9c0': '4', '\ue9ca': '网', '\ue9cc': '层', '\ue9de': '八','\ue9e0': '粉', '\ue9e5': '上', '\ue9e6': '去', '\ue9ea': '处', '\ue9f1': '童', '\ue9fa': '性', '\uea01': '种','\uea09': '量', '\uea0d': '彩', '\uea12': '健', '\uea27': '连', '\uea3b': '府', '\uea45': '湖', '\uea4f': '第','\uea56': '厂', '\uea59': '较', '\uea6f': '贸', '\uea7c': '错', '\uea7f': '木', '\uea84': '段', '\uea98': '城','\ueaa6': '门', '\ueaa7': '工', '\ueaab': '出', '\ueab1': '昌', '\ueabe': '重', '\ueac8': '日', '\uead0': '份','\ueadc': '计', '\ueadd': '育', '\ueae2': '型', '\ueaf3': '矢口', '\ueafd': '三', '\ueb02': '产', '\ueb11': '泰','\ueb1b': '停', '\ueb1d': '多', '\ueb3f': '汇', '\ueb49': '杨', '\ueb5a': '务', '\ueb64': '解', '\ueb67': '会','\ueb6f': '斯', '\ueb75': '1', '\ueb8e': '果', '\uebb1': '训', '\uebbf': '部', '\uebfa': '振', '\uebfe': '汽','\uec04': '贝', '\uec07': '盛', '\uec0b': '干', '\uec10': '沙', '\uec14': '放', '\uec1d': '奶', '\uec1f': '双','\uec23': '维', '\uec29': '源', '\uec2f': '汉', '\uec4e': '武', '\uec54': '一', '\uec5d': '州', '\uec5e': '屋','\uec6e': '养', '\uec6f': '选', '\uec83': '下', '\uec84': '和', '\uec9f': '边', '\ueca0': '星', '\uecb4': '开','\uecbc': '买', '\uecbf': '瑞', '\uecce': '欢', '\uecd5': '石', '\uecd9': '医', '\uecda': '包', '\uecdd': '鑫','\uecde': '爱', '\uece2': '以', '\ueceb': '家', '\uecf4': '迎', '\uecf6': '朝月', '\ued05': '很', '\ued09': '团','\ued15': '饼', '\ued28': '快', '\ued2d': '明月', '\ued32': '祥', '\ued3b': '岗', '\ued4d': '周', '\ued6c': '活','\ued7d': '服', '\ued89': '米', '\ued8a': '7', '\ued8e': '实', '\ued98': '四', '\ueda2': '马', '\uedb1': '鸡','\uedc3': '桂', '\uedce': '作', '\uedd0': '棒', '\uedd8': '鞋', '\ueddd': '井', '\uede1': '记', '\uedf0': '微','\uedf7': '黄', '\uedfb': '氏', '\uee16': '之', '\uee1a': '手', '\uee20': '还', '\uee24': '加', '\uee34': '尚','\uee38': '力', '\uee44': '间', '\uee52': '才', '\uee56': '当', '\uee59': '评', '\uee73': '教', '\uee80': '境','\uee81': '卖', '\uee9a': '近', '\uee9d': '酒', '\uee9e': '吧', '\ueeb0': '汤', '\ueebe': '头', '\ueec1': '鸿','\ueec3': '室', '\ueec7': '世', '\ueecf': '德', '\ueed0': '热', '\ueef2': '看', '\uef13': '块', '\uef3c': '等','\uef46': '龙', '\uef4b': '桥', '\uef57': '津', '\uef61': '滨', '\uef62': '局', '\uef64': '副', '\uef6f': '别','\uef81': '旁', '\uef8b': '拉', '\uef8d': '体', '\uef8f': '万', '\uef90': '台', '\uefad': '十', '\uefae': '分','\uefbd': '布', '\uefc4': '片牌', '\uefec': '办', '\uefee': '兰', '\ueff2': '山', '\ueff8': '单', '\uf00a': '料','\uf01d': '回', '\uf01e': '园', '\uf020': '洗', '\uf034': '大', '\uf03f': '妇', '\uf042': '又', '\uf055': '蛋','\uf05d': '烟', '\uf067': '行', '\uf069': '珠', '\uf081': '原', '\uf092': '南', '\uf0ab': '置', '\uf0b8': '后','\uf0ba': '位', '\uf0bd': '配', '\uf0d0': '哈', '\uf0d4': '里', '\uf0d8': '丰', '\uf0dc': '皮', '\uf0e3': '想','\uf0e4': '乡', '\uf0f9': '站', '\uf10a': '而', '\uf11c': '电', '\uf11e': '对', '\uf136': '峰', '\uf138': '云','\uf14d': '凤', '\uf155': '厅', '\uf15a': '阿', '\uf15f': '刚', '\uf16a': '水', '\uf187': '丁', '\uf18a': '他','\uf18c': '次', '\uf18e': '主', '\uf194': '来', '\uf199': '像', '\uf1af': '整', '\uf1b0': '道', '\uf1b1': '百','\uf1ce': '区', '\uf1ee': '小', '\uf1f4': '铁', '\uf1fa': '培', '\uf20a': '环', '\uf211': '羊', '\uf22d': '感','\uf237': '们', '\uf243': '那', '\uf244': '嫩', '\uf248': '点', '\uf250': '红', '\uf252': '购', '\uf261': '片','\uf272': '批', '\uf282': '虾', '\uf289': '长', '\uf28d': '村', '\uf291': '果', '\uf29b': '如', '\uf2bc': '就','\uf2c2': '信', '\uf2cb': '荣', '\uf2d3': '队人', '\uf2df': '塘', '\uf2ef': '紫', '\uf2fb': '糕', '\uf2fe': '虫工','\uf309': '锅', '\uf30c': '口', '\uf31b': '味末', '\uf325': '过', '\uf329': '陵', '\uf32b': '饰', '\uf32d': '商','\uf336': '食', '\uf33f': '甜', '\uf349': '态', '\uf34d': '友', '\uf35f': '女', '\uf362': '九', '\uf365': '货','\uf36b': '合', '\uf373': '入', '\uf375': '幢童', '\uf393': '秀', '\uf396': '洲', '\uf3a1': '得', '\uf3a8': '绿','\uf3bf': '永', '\uf3c1': '高', '\uf400': '价', '\uf41f': '五', '\uf422': '板', '\uf428': '挺', '\uf42d': '好','\uf431': '老', '\uf438': '荐', '\uf443': '溪', '\uf45f': '业', '\uf462': '话', '\uf478': '术', '\uf49e': '二','\uf4a0': '居', '\uf4a4': '科', '\uf4b0': '尔', '\uf4db': '街', '\uf4ec': '动', '\uf4fd': '市', '\uf50f': '佳','\uf516': '非', '\uf51c': '厦', '\uf53d': '满', '\uf540': '塔', '\uf548': '幼', '\uf555': '政', '\uf55d': '本','\uf57f': '些', '\uf590': '轩', '\uf594': '尝', '\uf5a2': '鱼', '\uf5ac': '最', '\uf5bd': '王', '\uf5c7': '定','\uf5de': '附', '\uf5e8': '说', '\uf5ec': '联', '\uf5f4': '进', '\uf5f6': '技', '\uf5f7': '外', '\uf5f8': '华','\uf5fa': '级', '\uf602': '沿', '\uf603': '安束', '\uf606': '济', '\uf630': '丽', '\uf632': '吃', '\uf63e': '烤','\uf653': '期', '\uf655': '集', '\uf668': '牛', '\uf670': '岛', '\uf67c': '直', '\uf68d': '化', '\uf691': '北','\uf698': '午', '\uf69d': '民', '\uf6b9': '鲜羊', '\uf6cd': '川', '\uf6d0': '油', '\uf6d8': '现', '\uf6f1': '隆','\uf6f7': '己', '\uf6f8': '鸭', '\uf702': '田', '\uf712': '广', '\uf715': '柳', '\uf71d': '阿', '\uf722': '场','\uf727': '花', '\uf72c': '甲', '\uf735': '调', '\uf746': '国', '\uf759': '肉', '\uf75f': '格', '\uf764': '精','\uf778': '豆', '\uf779': '雅', '\uf780': '阳', '\uf78f': '师', '\uf7a7': '推', '\uf7ac': '为', '\uf7ad': '提','\uf7b2': '旗', '\uf7b6': '建', '\uf7b7': '什', '\uf7c8': '平', '\uf7d0': '具', '\uf7d6': '号', '\uf7d7': '侧','\uf7d9': '到', '\uf7e1': '梅', '\uf7f0': '茶', '\uf7f3': '设', '\uf7f6': '晚', '\uf803': '白', '\uf805': '莲','\uf813': '只', '\uf814': '运', '\uf816': '给', '\uf821': '恒', '\uf824': '菜', '\uf838': '么', '\uf843': '足','\uf84d': '你', '\uf853': '厨', '\uf85c': '烫', '\uf85f': '喜', '\uf867': '装', '\uf86c': '两', '\uf87d': '物','\uf884': '河', '\uf888': '再', '\uf891': '交', '\uf89c': '朋', '\uf8c7': '常', '\uf8ca': '烧', '\uf8cf': '宁','\uf8d7': '乐', '\uf8e1': '林', '\uf8ee': '通', '\uf8f9': '县', '\uf8fb': '儿', '\uf8fe': '新'}

以评分95% 做分割 ,下面是可能不对的,经过对比图片发现没有错误。只是评分较低。

{'\ue05e': {'text': '所', 'score': 0.7101963758468628}, '\ue069': {'text': '气', 'score': 0.8201217651367188},'\ue07e': {'text': '3', 'score': 0.9448353052139282}, '\ue08f': {'text': '际', 'score': 0.8827687501907349},'\ue0dd': {'text': '费', 'score': 0.9348242282867432}, '\ue11c': {'text': '张长', 'score': 0.8512042164802551},'\ue133': {'text': '5', 'score': 0.8904429078102112}, '\ue154': {'text': '笑', 'score': 0.9278842210769653},'\ue159': {'text': '凯', 'score': 0.9020307064056396}, '\ue161': {'text': '色', 'score': 0.6160538196563721},'\ue17d': {'text': '座', 'score': 0.9377821683883667}, '\ue189': {'text': '了', 'score': 0.9472777843475342},'\ue1b7': {'text': '角', 'score': 0.9137881398200989}, '\ue1be': {'text': '着', 'score': 0.9061774611473083},'\ue29f': {'text': '情', 'score': 0.6765124201774597}, '\ue3f0': {'text': '正', 'score': 0.9489812254905701},'\ue406': {'text': '香', 'score': 0.9193495512008667}, '\ue42b': {'text': '余科', 'score': 0.31485822796821594},'\ue430': {'text': '讯', 'score': 0.7896761894226074}, '\ue440': {'text': '舟受', 'score': 0.4272177815437317},'\ue445': {'text': '锦', 'score': 0.93426513671875}, '\ue495': {'text': '都', 'score': 0.9491526484489441},'\ue498': {'text': '9', 'score': 0.9058276414871216}, '\ue4ae': {'text': '顺', 'score': 0.8457756638526917},'\ue4b8': {'text': '8', 'score': 0.745848536491394}, '\ue4ff': {'text': '酸令', 'score': 0.23059628903865814},'\ue536': {'text': '在', 'score': 0.9107916355133057}, '\ue53c': {'text': '松', 'score': 0.8348405957221985},'\ue548': {'text': '2', 'score': 0.7965168356895447}, '\ue5c2': {'text': '事', 'score': 0.9056740999221802},'\ue61d': {'text': '专', 'score': 0.780048131942749}, '\ue640': {'text': '火', 'score': 0.901986300945282},'\ue673': {'text': '强', 'score': 0.9025680422782898}, '\ue6a7': {'text': '式', 'score': 0.9470093846321106},'\ue6ae': {'text': '美', 'score': 0.9245206713676453}, '\ue6e4': {'text': '景', 'score': 0.5590194463729858},'\ue74c': {'text': '制', 'score': 0.7929206490516663}, '\ue755': {'text': '文', 'score': 0.9355360269546509},'\ue756': {'text': '诚', 'score': 0.9329637289047241}, '\ue758': {'text': '方', 'score': 0.9357324242591858},'\ue76e': {'text': '利', 'score': 0.7340298891067505}, '\ue7e4': {'text': '岭', 'score': 0.6351971626281738},'\ue7ff': {'text': '博', 'score': 0.9468564987182617}, '\ue848': {'text': '比', 'score': 0.8979260325431824},'\ue849': {'text': '赞', 'score': 0.8741719126701355}, '\ue856': {'text': '候', 'score': 0.7024070024490356},'\ue85d': {'text': '便', 'score': 0.61191725730896}, '\ue897': {'text': '心', 'score': 0.9427058100700378},'\ue8ad': {'text': '6', 'score': 0.7724475860595703}, '\ue8ed': {'text': '限良', 'score': 0.8311377763748169},'\ue920': {'text': '0', 'score': 0.5414958000183105}, '\ue92a': {'text': '地', 'score': 0.47658202052116394},'\ue967': {'text': '风', 'score': 0.9264501929283142}, '\ue9c0': {'text': '4', 'score': 0.8089628219604492},'\ue9de': {'text': '八', 'score': 0.4221823215484619}, '\ue9e6': {'text': '去', 'score': 0.9465771317481995},'\ue9ea': {'text': '处', 'score': 0.729453444480896}, '\ue9f1': {'text': '童', 'score': 0.8890518546104431},'\ue9fa': {'text': '性', 'score': 0.8406746983528137}, '\uea01': {'text': '种', 'score': 0.9463455677032471},'\uea0d': {'text': '彩', 'score': 0.9497383832931519}, '\uea56': {'text': '厂', 'score': 0.9360781311988831},'\ueaa6': {'text': '门', 'score': 0.9319864511489868}, '\ueab1': {'text': '昌', 'score': 0.8610723614692688},'\ueaf3': {'text': '矢口', 'score': 0.9479916095733643}, '\ueafd': {'text': '三', 'score': 0.9098818302154541},'\ueb1d': {'text': '多', 'score': 0.9341955780982971}, '\ueb3f': {'text': '汇', 'score': 0.926189661026001},'\ueb6f': {'text': '斯', 'score': 0.9391093254089355}, '\ueb8e': {'text': '果', 'score': 0.39117464423179626},'\uebb1': {'text': '训', 'score': 0.9340453743934631}, '\uec0b': {'text': '干', 'score': 0.5374392867088318},'\uec4e': {'text': '武', 'score': 0.9499560594558716}, '\uec54': {'text': '一', 'score': 0.8632733821868896},'\uec83': {'text': '下', 'score': 0.9410864114761353}, '\ueca0': {'text': '星', 'score': 0.9497742056846619},'\uecf6': {'text': '朝月', 'score': 0.8974940776824951}, '\ued2d': {'text': '明月', 'score': 0.5373875498771667},'\ued7d': {'text': '服', 'score': 0.4188182055950165}, '\ued8a': {'text': '7', 'score': 0.7986817359924316},'\uedb1': {'text': '鸡', 'score': 0.6929422616958618}, '\uedce': {'text': '作', 'score': 0.6247490644454956},'\ueddd': {'text': '井', 'score': 0.9002070426940918}, '\uee1a': {'text': '手', 'score': 0.9290779829025269},'\uee24': {'text': '加', 'score': 0.9063721895217896}, '\uee9e': {'text': '吧', 'score': 0.9220173358917236},'\ueec7': {'text': '世', 'score': 0.925752580165863}, '\ueecf': {'text': '德', 'score': 0.9239265322685242},'\uef64': {'text': '副', 'score': 0.9384047985076904}, '\uef6f': {'text': '别', 'score': 0.8920194506645203},'\uefad': {'text': '十', 'score': 0.8840975165367126}, '\uefc4': {'text': '片牌', 'score': 0.4957613945007324},'\uf03f': {'text': '妇', 'score': 0.8898952007293701}, '\uf042': {'text': '又', 'score': 0.8956716656684875},'\uf05d': {'text': '烟', 'score': 0.8573434948921204}, '\uf069': {'text': '珠', 'score': 0.75028395652771},'\uf0bd': {'text': '配', 'score': 0.7989603877067566}, '\uf0d8': {'text': '丰', 'score': 0.7629039883613586},'\uf0e4': {'text': '乡', 'score': 0.7125524878501892}, '\uf10a': {'text': '而', 'score': 0.9461195468902588},'\uf136': {'text': '峰', 'score': 0.9324420690536499}, '\uf14d': {'text': '凤', 'score': 0.8371238708496094},'\uf15f': {'text': '刚', 'score': 0.8563844561576843}, '\uf1ee': {'text': '小', 'score': 0.6941447257995605},'\uf20a': {'text': '环', 'score': 0.8093100786209106}, '\uf211': {'text': '羊', 'score': 0.817395806312561},'\uf22d': {'text': '感', 'score': 0.9368784427642822}, '\uf237': {'text': '们', 'score': 0.9287102818489075},'\uf244': {'text': '嫩', 'score': 0.7814606428146362}, '\uf29b': {'text': '如', 'score': 0.32676398754119873},'\uf2d3': {'text': '队人', 'score': 0.5490540862083435}, '\uf2fe': {'text': '虫工', 'score': 0.5634275674819946},'\uf309': {'text': '锅', 'score': 0.8993457555770874}, '\uf31b': {'text': '味末', 'score': 0.24660344421863556},'\uf32b': {'text': '饰', 'score': 0.6643277406692505}, '\uf375': {'text': '幢童', 'score': 0.3151859641075134},'\uf3a8': {'text': '绿', 'score': 0.7714439034461975}, '\uf42d': {'text': '好', 'score': 0.8344385027885437},'\uf45f': {'text': '业', 'score': 0.7493254542350769}, '\uf49e': {'text': '二', 'score': 0.8919293284416199},'\uf4ec': {'text': '动', 'score': 0.6594783663749695}, '\uf50f': {'text': '佳', 'score': 0.8723465204238892},'\uf516': {'text': '非', 'score': 0.9436918497085571}, '\uf5ec': {'text': '联', 'score': 0.5172083973884583},'\uf603': {'text': '安束', 'score': 0.613476037979126}, '\uf630': {'text': '丽', 'score': 0.9419771432876587},'\uf653': {'text': '期', 'score': 0.9299824237823486}, '\uf668': {'text': '牛', 'score': 0.643532931804657},'\uf67c': {'text': '直', 'score': 0.9217656850814819}, '\uf6b9': {'text': '鲜羊', 'score': 0.7307806015014648},'\uf6f8': {'text': '鸭', 'score': 0.7272024750709534}, '\uf712': {'text': '广', 'score': 0.9106811285018921},'\uf715': {'text': '柳', 'score': 0.8577496409416199}, '\uf722': {'text': '场', 'score': 0.6829107403755188},'\uf72c': {'text': '甲', 'score': 0.9237180948257446}, '\uf735': {'text': '调', 'score': 0.9441312551498413},'\uf78f': {'text': '师', 'score': 0.8918313980102539}, '\uf7b7': {'text': '什', 'score': 0.6794707179069519},'\uf803': {'text': '白', 'score': 0.949399471282959}, '\uf805': {'text': '莲', 'score': 0.939042866230011},'\uf814': {'text': '运', 'score': 0.9052926301956177}, '\uf838': {'text': '么', 'score': 0.9014909863471985},'\uf888': {'text': '再', 'score': 0.9475842714309692}, '\uf8fb': {'text': '儿', 'score': 0.8162266612052917}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源视频联动物联网平台】视频接入网关的用法

视频接入网关是一种功能强大的视频网关设备&#xff0c;能够解决各种视频接入、视频输出、视频转码和视频融合等问题。它可以在应急指挥、智慧融合等项目中发挥重要作用&#xff0c;与各种系统进行对接&#xff0c;解决视频能力跨系统集成的难题。 很多视频接入网关在接入协议…

zookeeper 单机伪集群搭建简单记录(实操课程系列)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper 1、官方下载加压后&#xff0c;根目录下新建data和log目录&#xff0c;然后分别拷贝两份&#xff0c;分别放到D盘&#xff0c;E盘&#xff0c;F盘 2、data目录下面…

hive创建ES外部表过程中的问题

一、缺少jar包&#xff1a;httpclient 报错&#xff1a; “HiveServer2-Handler-Pool: Thread-696” java.lang.NoClassDefFoundError: org/apache/commons/httpclient/protocol/ProtocolSocketFactory 需要加载commons-httpclient-3.1.jar 二、缺少jar包&#xff1a;eshado…

微服务实战系列之EhCache

前言 书接前文&#xff0c;继续深耕。上一篇博主对Redis进行了入门级介绍&#xff0c;大体知道了Redis可以干什么以及怎么使用它。 今日博主继续带着大家学习如何使用EhCache&#xff0c;这是一款基于Java的缓存框架。 微服务实战系列之Redis微服务实战系列之Cache微服务实战…

指针(2)

函数指针数组 函数指针数组是一个用来存放函数指针&#xff08;地址&#xff09;的数组。 如上图&#xff0c;是将两个函数指针存入数组中。如何写函数指针数组名呢&#xff1f;我们可以先写出函数指针类型int (*)(int,int)然后在(*)里面加上数组名[]即可。 指向函数指针数组…

ubuntu22.04识别CH340的问题汇总

一、目的 自己的电脑装的是双系统&#xff0c;ubuntu22.04安装了很久好久没有&#xff08;WSL2确实解决了频繁依赖linux的问题&#xff09;。昨天尝试搞一下STM32MP135的系统搭建&#xff0c;开始启用ubuntu22.04。但是遇到了很多问题&#xff0c;其中一个问题就是CH340的驱动…

Linux安全配置

进入ssh配置文件 vim /etc/ssh/sshd_config将port 22中的端口号改为5001 重启ssh服务 systemctl restart sshd拓展 sh与bash iptable与firewall ssh与sshd vps与ssh 参考&#xff1a; 【安全-SSH】SSH安全设置 - CSDN AppLinux VPS服务器SSH端口一键修改脚本​Linux脚本…

【课设大报告】 基于matlab gui设计的三极管学习系统

目录 设计背景 1.1设计目的 2.设计方法 2.1使用软件工具 2.2设计流程 3.模块界面设计及代码分析 3.1登录 3.2注册 3.3主菜单 3.4三极管介绍 3.5进制转换 3.6单位换算 3.7绘图 4.不足和改善 5.总结 设计背景 1.1设计目的 本程序旨在帮助为了帮助学生了解三极管…

C语言——有一个3*4的矩阵,要求求出其中值最大的那个元素的值,以及其所在的行号和列号

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j,row0,colum0,a[3][4]{{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};int maxa[0][0];for ( i 0; i < 3; i)//行&#xff08;row&#xff09;{for ( j 0; j < 4; j)//列&#xff08;colum&#xf…

【Python】基础练习题_组合数据类型_2

dictMenu f’卡布奇洛’:32,‘摩卡’:30,‘抹茶蛋糕’:28,‘布朗尼’:26}&#xff0c; dictMenu 中存放了你的双人下午套餐&#xff08;包括咖啡2份和点心2份)的价格,请编写程序,让Python帮忙计算并输出消费总额。 dictMenu {卡布奇洛: 32, 摩卡: 30, 抹茶蛋糕: 28, 布朗尼: 2…

【云平台】STM32微信小程序阿里云平台学习板

【云平台】STM32微信小程序阿里云平台学习板 文章目录 前言一、立创EDA&#xff08;硬件设计&#xff09;1.主控STM32F103C8T62.ESP8266模块3.温湿度模块4.光照强度模块5.OLED显示模块6.PCB正面7.PCB反面8.3D视角正面9.3D视角反面 二、【云平台】STM32微信小程序阿里云平台学习…

CentOS7 网络配置

前言&#xff1a; 安装虚拟机后&#xff0c;在虚拟机ping www.baidu.com ping不通。 一、centos7配置IP地址有两种方法&#xff1a; 动态获取IP&#xff08;不推荐使用&#xff09;设置静态ip&#xff08;推荐&#xff09; 二、centos7配置静态IP&#xff1a; 第一步&#xff…

使用npm发布typescript包

使用npm发布typescript包 什么是NPM NPM&#xff08;节点包管理器&#xff09;是 JavaScript 编程语言的默认包管理器。NPM 注册表是一个公共存储库&#xff0c;充当存储和分发 JavaScript 包的中心枢纽。它允许开发人员轻松安装、管理和共享可重用的 JavaScript 代码包&…

python实现two way ANOVA

文章目录 目的&#xff1a;用python实现two way ANOVA 双因素方差分析1. python代码实现1 加载python库2 加载数据3 统计样本重复次数&#xff0c;均值和方差&#xff0c;绘制箱线图4 查看people和group是否存在交互效应5 模型拟合与Two Way ANOVA&#xff1a;双因素方差分析6 …

LeetCode(34)有效的数独【矩阵】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 36. 有效的数独 1.题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗…

[原创][3]探究C#多线程开发细节-“用ConcurrentQueue<T>解决多线程的无顺序性的问题“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

Unity随笔1 - 安卓打包JDK not found

今天遇到一个很奇怪的事情&#xff0c;之前可以正常打安卓包&#xff0c;但是突然报错如下&#xff1a; 提示很明显&#xff0c;找不到JDK了。可是我在下载Unity的时候明明安装了所有需要的组件&#xff0c;为什么今天突然不行。 看了眼Unity hub里面&#xff0c;没问题。 那就…

MySQL表的查询、更新、删除

查询 全列查询 指定列查询 查询字段并添加自定义表达式 自定义表达式重命名 查询指定列并去重 select distinct 列名 from 表名 where条件 查询列数据为null的 null与 (空串)是不同的&#xff01; 附&#xff1a;一般null不参与查询。 查询列数据不为null的 查询某列数据指定…

概念理论类-k8s :架构篇

转载&#xff1a;新手通俗易懂 k8s &#xff1a;架构篇 Kubernetes&#xff0c;读音是[kubə’netis]&#xff0c;翻译成中文就是“库伯奈踢死”。当然了&#xff0c;也可以直接读它的简称&#xff1a;k8s。为什么把Kubernetes读作k8s&#xff0c;因为Kubernetes中间有8个字母…

ssm+java车辆售后维护系统 springboot汽车保养养护管理系统+jsp

以前汽车维修人员只是在汽车运输行业中从事后勤保障工作,随着我国经济的发展,汽车维修行业已经从原来的从属部门发展成了如今的功能齐备的独立企业。这种结构的转变,给私营汽修企业和个体汽修企业的发展带来了契机,私营企业和个体维修企业的加入也带动了整个汽修行业的整体水平…