猿人学第七题-动态字体-随风漂移

前言:该题主要是考对fontTools.ttLib.TTFont的操作,另外就是对字典互相映射的操作

一、woff文件存储

from fontTools.ttLib import TTFont #pip install fontTools
def save_woff(response):woff = response['woff']woff_file = base64.b64decode(woff.encode())with open('aim.woff', 'wb') as f:f.write(woff_file)

二、可视化woff文件

1.首先要把woff文件存成xml格式

from fontTools.ttLib import TTFont# 加载字体文件:font = TTFont('ami.woff')# 保存为xml文件:font.saveXML('local_fonts.xml')

2.利用网站查看

Iconfont Previewiconfont preview for web, Momo's Blog, LuckyMomoicon-default.png?t=N7T8https://blog.luckly-mjw.cn/tool-show/iconfont-preview/index.html

        通过这两步可以建立初始化的name与num列表

三、抓取一页建立woff中flag与数字之间的关系

1.利用可视化网站手动输出woff中name与数字的关系

r_map = {'unic543': 0, 'unib928': 1, 'unic193': 2, 'unib958': 3, 'unia257': 4, 'unic829': 5, 'unib716': 6, 'unic182': 7,'unic387': 8, 'unib718': 9}  # 数字映射字典

2.输出name与flag的关系

def base_font_map(woff):"""构造基本on数组映射模板"""ttobj = TTFont(woff)tt_names = ttobj.getGlyphNames()[1:]  # 获取所有name值cmap = {}for i in tt_names:cmap[tuple(ttobj['glyf'][i].flags)] =  i # 构造基本映射on数组模板return cmap
print(base_font_map('aim.woff'))

3.建立flag(on)与数字的关系

def on_num(on_name,name_num):onnum={}for key,value in on_name.items():onnum[key]=name_num[value]return onnum

四、处理一页response.data数据

def page_data(data,page_name_num): #data=每一页解析的data数据,page_name_num=每一页解析出的name与num的对应关系nums=[]for d_v in data:name_list=d_v['value'].replace('&#x','uni').split(' ')if name_list[-1]=='':name_list.pop()point=''for name in name_list:point+=str(page_name_num[name])nums.append(point)return nums

五、处理一页woff值中name与num的对应关系

def name_num(onnum,nameon):namenum={}for key,value in nameon.items():namenum[key]=onnum[value]return namenum

六、返回一页的point点

def page_point(page):url = f"https://match.yuanrenxue.cn/api/match/7?page={page}"response = requests.get(url, headers=headers, cookies=cookies).json()data = response['data']woff = response['woff']save_woff(woff, page)nameon = base_font_map(f'{page}.woff')namenum = name_num(onnum, nameon)page_point_list = page_data(data, namenum)return page_point_list

七、获取全部数据

def main(name_list):point_list = []for page in range(1, 6):point_list.extend(page_point(page))print(point_list)   print(max(point_list))print(name_list[point_list.index(max(point_list)) + 1])

最后有一点网页里名字的索引是从1开始的,所以point的最大值索引要+1才是名字的索引。

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

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

相关文章

Java Jackson-jr 库是干什么用的

Jackson-jr 是一个轻量级的Java JSON 处理库。这个库被设计用来替代 Jackson 的复杂性。对比 Jackson 的复杂 API,Jackson-jr 的启动速度更快,包大小更小。 虽然Jackson databind(如ObjectMapper)是通用数据绑定的良好选择&#…

uniapp动态设置Tabbar

一套小程序及app可能会有多个用户角色,多者能看到的内容应该是不一样的。 实现原理 舍弃uniapp原生的tabbar,使用uView插件下的u-tabbar导航插件来实现。介绍 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI,是…

JavaScript百炼成仙自学笔记——2

一、循环遍历&#xff1a; 方式一 for(var i0;i<10;i){console.log(i); }方式二 var i 0; while(i < 100){console.log(i);i; }细看代码就是 先定义变量i&#xff0c;再执行{}中的代码&#xff0c;最后改循环变量的值 二、遍历 什么事遍历&#xff1f; 什么时候会用…

CMakeLists.txt语法规则:部分常用命令说明四

一. 简介 前面几篇文章学习了CMakeLists.txt语法中前面几篇文章学习了CMakeLists.txt语法中部分常用命令。文章如下&#xff1a; CMakeLists.txt语法规则&#xff1a;部分常用命令说明一-CSDN博客 CMakeLists.txt语法规则&#xff1a;部分常用命令说明二-CSDN博客 CMakeLi…

基于springboot+vue+Mysql的自习室预订系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

谈谈Tcpserver开启多线程并发处理遇到的问题!

最近在学习最基础的socket网络编程&#xff0c;在Tcpserver开启多线程并发处理时遇到了一些问题&#xff01; 说明 在linux以及Windows的共享文件夹进行编写的&#xff0c;所以代码中有的部分使用 #ifdef WIN64 ... #else ... #endif 进入正题&#xff01;&#xff01;&…

Unity Navigation 入门(新版)

概述 在游戏的制作过程中&#xff0c;寻路功能一定是非常重要的部分&#xff0c;他可以为主角寻路&#xff0c;也可以运用到敌人追击等&#xff0c;相比于自己实现的难度&#xff0c;使用寻路组件就显得简单的多&#xff0c;那接下来就开始学习这部分的内容吧 1.安装AI Naviga…

MySQL 运维篇

回顾基本语句&#xff1a; 数据定义语言(DDL) 这类语言用于定义和修改数据库的结构&#xff0c;包括创建、删除和修改数据库、 表、视图和索引等对象。 主要的语句关键字包括 CREATE 、 DROP 、 ALTER 、 RENAME 、 TRUNCATE 等。 create database 数据库 &#xff1b; cr…

关于AIGC发展历程的研究报告(原创文章)

摘要&#xff1a; 2022年&#xff0c;Chat GPT和Stable Diffusion展现了AIGC强大的技术实力&#xff0c;拉开了AIGC时代的帷幕。2023年&#xff0c;GPT-4、Midjourney V5等又掀起了人工智能的热潮&#xff0c;2024年2月15日&#xff08;美国当地时间&#xff09;正式对外发布的…

代码随想录day51 | 动态规划P12 | ● 309. ● 714. ●买卖股票总结

309.最佳买卖股票时机含冷冻期 给定一个整数数组 prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 卖出股票后&…

《21天学通C++》(第十一章)多态

为什么需要多态&#xff1f; 为了最大限度地减少代码&#xff0c;提高可读性 1.虚函数 虚函数是C中的一种特殊成员函数&#xff0c;它允许在派生类&#xff08;也称为子类&#xff09;中重写&#xff08;覆盖&#xff09;基类的实现&#xff0c;使用virtual进行声明 在C中&am…

【Java EE】多线程(二)Thread 类与常用方法

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

【Qt QML】Frame组件

Frame&#xff08;框架&#xff09;包含在&#xff1a; import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局&#xff0c;但需要自己对元素位置进行设置和定位&#xff0c;例如通过…

【JavaEE 初阶(二)】线程安全问题

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多线程知识 目录 1.前言2.synchronized2.1例子2.2synchronized修饰代码块2.3 synchronized修饰方法2.4sy…

python中怎么清屏

一、“Windows命令行窗口”下清屏&#xff0c;可用下面两种方法&#xff1a; 第一种方法&#xff0c;在命令行窗口输入&#xff1a; import os ios.system("cls") 第二种方法&#xff0c;在命令行窗口输入&#xff1a; import subprocess isubprocess.call("cl…

数据结构--链表进阶面试题

在链表题目开始之前我们来复习一道数组元素的逆序问题&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 提示&#xff1a; 1 < nums.length < 10^5-2^31 < nums[i] < 2^31 - 10 < k < 10^5 思…

微信小程序之搜索框样式(带源码)

一、效果图&#xff1a; 点击搜索框&#xff0c;“请输入搜索内容消失”&#xff0c;可输入关键字 二、代码&#xff1a; 2.1、WXML代码&#xff1a; <!--搜索框部分--><view class"search"><view class"search-btn">&#x1f50d;&l…

QT5之事件——包含提升控件

事件概述 信号就是事件的一种&#xff0c;事件由用户触发&#xff1b; 鼠标点击窗口&#xff0c;也可以检测到事件&#xff1b;产生事件后&#xff0c;传给事件处理&#xff0c;判断事件类型&#xff0c;后执行事件相应函数&#xff1b; 类似单片机的中断&#xff08;中断向量…

Docker 入门与实践:从零开始构建容器化应用环境

Docker 一、docker常用命令docker ps 格式化输出Linux设置命令别名 二、数据卷相关命令挂载到默认目录&#xff08;/var/lib/docker&#xff09;挂载到本地目录 三、自定义镜像Dockerfile构建镜像的命令 四、网络自定义网络 五、DockerCompose相关命令 一、docker常用命令 dock…

Superset二次开发之Legend功能优化

背景 Legend数据太长,影响整体图表体验,为改善用户体验,需要实现:1.数据省略展示,‘...’表示,鼠标悬停时,展示完整信息 2:文本内容从左向右滚动展示 柱状图优化 柱状图来自第三方Echarts插件,效果展示 功能核心在于红框的内容 option = {tooltip: {trigger: item,ax…