当前位置: 首页 > article >正文

EVA-02一键部署教程:Python爬虫数据智能处理实战

EVA-02一键部署教程Python爬虫数据智能处理实战你是不是也遇到过这种情况用Python爬虫辛辛苦苦抓了一堆网页数据结果发现里面全是乱七八糟的HTML标签和广告信息真正有用的内容被埋得严严实实。手动写规则去提取吧每个网站结构都不一样规则写到手软用传统方法吧又经常抽取出错效率低得让人抓狂。今天要跟你分享的就是解决这个痛点的“神器”——EVA-02模型。它不是什么新出的爬虫框架而是一个能“看懂”网页内容的视觉语言模型。简单来说就是让AI帮你理解网页在“说什么”然后智能地把你需要的数据找出来。这篇教程我会手把手带你在星图GPU平台上从零开始一键部署EVA-02并把它和Python爬虫结合起来打造一个能智能处理网页数据的工具。整个过程不需要你懂复杂的模型训练跟着步骤走就行。1. 环境准备与一键部署部署环境听起来可能有点技术含量但在星图平台上其实比你想象的要简单得多。整个过程就像安装一个软件点几下就完成了。1.1 登录与镜像选择首先你需要有一个星图平台的账号。登录之后在控制台找到“镜像市场”或者“应用中心”类似的入口。这里就像一个大超市摆满了各种预装好环境的AI应用。我们在搜索框里输入“EVA-02”很快就能找到对应的镜像。你可能会看到几个不同版本的镜像建议选择标注了“最新版”或者“稳定版”的里面通常已经集成了我们后续需要的Python环境、CUDA驱动以及模型文件省去了自己配置的麻烦。找到之后点击“部署”或“创建实例”。这时平台会问你一些配置问题主要是选择用什么样的“电脑”来运行它。1.2 资源配置选择这里的关键是选择GPU。EVA-02模型虽然不算特别庞大但纯靠CPU跑起来会很慢体验很差。所以务必在资源配置里勾选GPU选项。对于个人学习或中小规模的数据处理选择一块显存8GB或以上的GPU就完全足够了比如平台提供的T4或者V100型号。内存建议配置在16GB以上硬盘空间留个50GB这样能确保模型文件和你的爬虫数据有足够的存放空间。选好配置后点击确认平台就会自动开始为你创建这个专属的环境。这个过程通常需要几分钟你可以去喝杯咖啡。当状态显示为“运行中”时我们的“战场”就准备好了。1.3 访问部署环境环境启动后平台会提供几种访问方式最常见的是JupyterLab和SSH终端。对于咱们这个教程我强烈推荐使用JupyterLab。点击JupyterLab的访问链接它会打开一个类似VS Code的网页编程界面。左边是文件管理器右边可以新建Python笔记本Notebook或者直接创建.py脚本文件。所有的操作我们都可以在这个网页里完成非常方便。现在我们的舞台已经搭好演员EVA-02模型也已经就位接下来就是请它出场了。2. 快速上手加载模型与基础调用进入JupyterLab后我们第一件事就是确认一下环境然后把模型“请出来”。2.1 环境检查与依赖安装虽然镜像可能预装了一些包但为了保险起见我们可以在终端里检查一下。新建一个终端窗口输入python --version如果显示是Python 3.8或更高版本那就没问题。接着我们安装一些必需的Python库。在终端里运行下面这行命令pip install torch torchvision pillow requests transformers这些库分别是PyTorch深度学习框架、图像处理工具、网络请求和Hugging Face的模型工具库。安装过程可能需要一两分钟。2.2 加载EVA-02模型环境搞定后我们新建一个Python脚本比如叫eva_demo.py。首先我们要写代码加载模型。别担心代码很简单。import torch from PIL import Image import requests from io import BytesIO from transformers import AutoModelForImageTextToText, AutoProcessor # 指定模型名称这里使用开源的EVA-02版本 model_name YOUR_EVA02_MODEL_NAME # 例如来自Hugging Face的路径 # 加载处理器和模型 print(正在加载模型和处理器请稍候...) processor AutoProcessor.from_pretrained(model_name) model AutoModelForImageTextToText.from_pretrained(model_name) # 将模型设置为评估模式并放到GPU上如果可用 device cuda if torch.cuda.is_available() else cpu model.to(device) model.eval() print(f模型已加载至{device})这里有个关键点YOUR_EVA02_MODEL_NAME需要替换成实际的模型路径。如果镜像里已经预置了模型路径可能是像/home/workspace/models/eva-02这样的本地路径。具体位置可以查看镜像的使用说明文档。2.3 第一个测试让模型“看”图说话模型加载成功后我们做个简单测试看看它是否工作正常。我们让它识别一张网络图片里的内容。# 1. 下载一张示例图片这里用一只猫的图片为例 image_url https://images.unsplash.com/photo-1514888286974-6d03bde4ba42?ixlibrb-4.0.3autoformatfitcropw800q80 response requests.get(image_url) image Image.open(BytesIO(response.content)) # 2. 准备问题用自然语言问模型 question 图片里有什么动物它是什么颜色的 # 3. 用处理器准备模型输入 inputs processor(imagesimage, textquestion, return_tensorspt).to(device) # 4. 让模型进行推理回答 with torch.no_grad(): # 不计算梯度加快推理速度 generated_ids model.generate(**inputs, max_new_tokens50) answer processor.batch_decode(generated_ids, skip_special_tokensTrue)[0] # 5. 打印结果 print(f问题{question}) print(f模型的回答{answer})运行这段代码如果一切顺利你会看到模型输出类似这样的回答“图片里有一只猫。它是橘白相间的颜色。” 这就证明我们的EVA-02模型已经成功部署并且能看懂图片内容了基础工作已经完成接下来就是重头戏怎么把这个“火眼金睛”的模型用到我们的爬虫项目里。3. 实战结合赋能Python爬虫智能解析传统的爬虫解析依赖XPath或CSS Selector一旦网页结构变动规则就失效了。而EVA-02的思路完全不同我们不关心HTML结构我们直接让AI看网页的“截图”然后回答我们关心的问题。3.1 核心思路从解析DOM到理解视觉内容想象一下你想从一个电商商品页抓取价格和标题。老办法是找到价格对应的HTML标签比如span class“price”然后提取里面的文本。新办法是把这个商品页渲染成一张图片然后问EVA-02“这张图片里的商品标题和价格是多少”这种方法的好处显而易见结构无关网页怎么改版都不怕只要人眼能看到信息AI就能读到。理解语义能处理文字描述复杂、位置不固定的信息。减少干扰自动过滤掉广告、导航栏等无关的视觉元素。3.2 工具准备将网页转为图片要实现这个思路第一步是把网页变成图片。我们可以用一个叫selenium的工具它能控制浏览器并截图。首先在终端安装它pip install selenium。同时你还需要下载一个对应浏览器的WebDriver比如ChromeDriver放在系统路径里或者指定它的位置。下面是一个将网页URL保存为图片的函数from selenium import webdriver from selenium.webdriver.chrome.options import Options import time def capture_webpage(url, save_pathscreenshot.png): 将指定URL的网页保存为截图 print(f正在捕获网页{url}) # 设置Chrome为无头模式不显示浏览器窗口 chrome_options Options() chrome_options.add_argument(--headless) chrome_options.add_argument(--no-sandbox) chrome_options.add_argument(--disable-dev-shm-usage) # 对于星图等云环境可能需要额外参数 chrome_options.add_argument(--disable-gpu) chrome_options.add_argument(--window-size1920,1080) driver webdriver.Chrome(optionschrome_options) driver.get(url) # 等待页面加载完成可以根据需要调整时间 time.sleep(3) driver.save_screenshot(save_path) driver.quit() print(f网页截图已保存至{save_path}) return save_path3.3 组合拳截图、提问、获取答案现在我们把前面学的模型调用和网页截图组合起来写一个完整的函数。这个函数能接受一个网页地址和一个问题然后返回AI从网页图片中找到的答案。def ask_eva_about_webpage(url, question): 核心函数向EVA-02询问关于网页内容的问题 步骤1. 截图 2. 加载图片 3. 准备问题 4. 获取答案 # 1. 截图 screenshot_path capture_webpage(url) # 2. 加载截图 image Image.open(screenshot_path) # 3. 4. 准备输入并获取答案 (复用之前的代码) inputs processor(imagesimage, textquestion, return_tensorspt).to(device) with torch.no_grad(): generated_ids model.generate(**inputs, max_new_tokens100) # 增加token长度以容纳更多信息 answer processor.batch_decode(generated_ids, skip_special_tokensTrue)[0] return answer # 实战测试抓取一个新闻标题 news_url https://example-news-site.com/article123 # 请替换为真实网址 query 这篇新闻文章的标题是什么主要讲了哪件事 result ask_eva_about_webpage(news_url, query) print(f对于网页{news_url}) print(f问题{query}) print(fEVA-02的解析结果\n{result})运行这段代码你就会得到一个基于网页视觉内容生成的文本摘要。它不再受HTML标签束缚而是真正“读懂”了网页上显示的内容。4. 构建智能爬虫管道单次问答很酷但要处理大量网页我们还需要一个自动化的流程。下面我以一个简单的爬虫任务为例展示如何构建一个智能处理管道。假设我们要监控几个科技博客抓取它们最新文章的标题和发布日期。4.1 定义任务与问题模板我们不再写复杂的解析规则而是为每类信息设计一个“问题模板”。# 信息提取的问题模板 question_templates { title: 这个网页上最主要文章的标题是什么请只返回标题文本。, publish_date: 这篇文章的发布日期或发布时间是什么请只返回日期。, summary: 用一两句话概括这篇文章的主要内容。, } # 要监控的博客列表 blogs_to_monitor [ https://blog.example1.com/latest, https://blog.example2.com/tech-news, # ... 添加更多网址 ]4.2 自动化批量处理流程接下来我们写一个循环自动遍历所有网址针对每个问题模板进行提问并把结果整理成结构化的数据比如JSON。import json results [] for blog_url in blogs_to_monitor: print(f\n处理中{blog_url}) blog_info {url: blog_url} try: # 为每个网址只截图一次 screenshot_path capture_webpage(blog_url) image Image.open(screenshot_path) for key, question_template in question_templates.items(): # 对同一张图片询问不同问题 inputs processor(imagesimage, textquestion_template, return_tensorspt).to(device) with torch.no_grad(): generated_ids model.generate(**inputs, max_new_tokens50) answer processor.batch_decode(generated_ids, skip_special_tokensTrue)[0] blog_info[key] answer print(f {key}: {answer}) results.append(blog_info) except Exception as e: print(f 处理 {blog_url} 时出错{e}) blog_info[error] str(e) results.append(blog_info) # 将结果保存到文件 with open(crawler_results.json, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2) print(f\n所有任务完成结果已保存至 crawler_results.json)这个流程就跑通了一个最基本的智能爬虫。它对于列表页、文章页、甚至结构复杂的页面都有不错的适应性。当然实际应用中你可能需要调整问题模板或者对模型的答案进行一些后处理比如清洗掉“根据图片标题是...”这样的引导语。5. 实用技巧与常见问题在实际使用中你可能会遇到一些小麻烦。这里分享几个我踩过坑后总结的技巧。技巧一优化问题提示Prompt模型的回答质量很大程度上取决于你怎么问。问题越具体、越清晰得到的答案就越准。比如与其问“日期是什么”不如问“这篇文章的发布日期格式类似‘2023-10-27’是什么”。技巧二处理长文本和复杂页面如果网页内容很长一张截图可能看不全。可以考虑关键区域截图用Selenium定位到特定元素如div#article-content再进行截图只给模型看核心区域。分块提问先问“页面顶部的主要标题是什么”再滚动到下方问“正文第一段讲了什么”。技巧三性能与成本考量缓存截图对于同一网页的多个问题务必只截图一次重复使用图片避免不必要的网络请求和渲染开销。批量推理如果有大量图片需要处理可以尝试将多张图片和对应问题组合成一个批次batch输入模型这通常比一张张处理要快。答案校验AI的答案偶尔会有“幻觉”或偏差。对于关键数据如价格、日期可以设计简单的规则进行校验或者设置一个置信度阈值过低时触发人工复核。常见问题模型回答“我不知道”或跑题这通常是问题不够明确或者图片中确实没有相关信息。尝试换一种问法或者检查截图是否包含了你要问的内容区域。运行速度慢确保使用了GPU并且模型已加载到GPU上model.to(device)。首次运行模型会有加载时间后续调用会快很多。内存不足OOM如果处理非常高分辨率的图片可能会撑爆显存。可以在截图时缩小浏览器窗口尺寸如--window-size1024,768或者在加载图片后用PIL库进行缩放。6. 总结走完这一趟你会发现给爬虫加上AI视觉能力思路一下子就打开了。我们不再和千变万化的HTML结构“斗智斗勇”而是回归本质——像人一样去看、去理解网页内容。EVA-02的一键部署在星图这样的平台上变得异常简单省去了配环境、下模型这些繁琐步骤让我们能快速聚焦在应用逻辑上。这种方法的优势在那些结构不规范、动态渲染或者信息嵌入在图片里的网页上尤其明显。当然它也不是万能的对于需要极高精度和速度的大规模采集可能还是需要结合传统方法。但对于很多灵活、中小型的智能抽取任务它提供了一个非常优雅且强大的解决方案。你可以基于今天这个教程继续拓展。比如尝试用更精准的问题模板来抽取商品规格、评论情感甚至是财务报表里的数据。这个结合了视觉与语言的模型能为你的数据获取工作打开一扇新的大门。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

EVA-02一键部署教程:Python爬虫数据智能处理实战

EVA-02一键部署教程:Python爬虫数据智能处理实战 你是不是也遇到过这种情况?用Python爬虫辛辛苦苦抓了一堆网页数据,结果发现里面全是乱七八糟的HTML标签和广告信息,真正有用的内容被埋得严严实实。手动写规则去提取吧&#xff0…...

granite-4.0-h-350m效果展示:Ollama运行下德语工业标准文档理解案例

granite-4.0-h-350m效果展示:Ollama运行下德语工业标准文档理解案例 1. 模型核心能力概览 Granite-4.0-H-350M是一个轻量级但功能强大的指令模型,专门针对设备部署和研究场景优化。这个350M参数的模型虽然体积小巧,但在多语言理解和指令跟随…...

免费开源钥匙建模终极指南:快速生成3D打印钥匙模型

免费开源钥匙建模终极指南:快速生成3D打印钥匙模型 【免费下载链接】keygen OpenSCAD tools for generating physical keys 项目地址: https://gitcode.com/gh_mirrors/ke/keygen 在数字化制造时代,开源钥匙建模工具Keygen为技术爱好者和实践者提…...

【2026唯一认证流式部署标准】:FastAPI 2.0 + Uvicorn 24.8 + ASGI 4.0协同流控协议详解(含OpenTelemetry追踪模板)

第一章:FastAPI 2.0 异步 AI 流式响应的范式演进与2026标准定位FastAPI 2.0 将原生支持全链路异步流式响应(StreamingResponse)与 Server-Sent Events(SSE)语义融合,标志着 AI 应用后端从“请求-响应”单次…...

QGC地面站视频流配置避坑指南:从Windows到Android,手把手解决‘无画面’问题

QGC地面站视频流配置避坑指南:从Windows到Android全平台实战解析 当无人机图传画面在QGroundControl中显示为黑屏时,那种挫败感每个飞手都深有体会。上周帮朋友调试一台Inspire 2时,我们花了整整三小时才找到问题根源——一个被忽略的GStream…...

Ollama安装路径优化:从C盘迁移到D盘的完整指南

1. 为什么需要迁移Ollama到D盘? 很多AI开发者在Windows系统上初次安装Ollama时,都会遇到一个头疼的问题——默认安装路径在C盘。随着模型文件的不断下载和项目积累,C盘空间很快就会被占满。我自己就经历过C盘爆红的尴尬,系统卡顿不…...

3步告别卡顿:用鸣潮工具箱实现流畅游戏体验

3步告别卡顿:用鸣潮工具箱实现流畅游戏体验 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你的游戏还在卡顿吗?试试这个免费解决方案 你是否曾经在《鸣潮》的激烈战斗中遭遇突然的…...

导师推荐!2026年最值得用的专业AI论文写作工具

2026年AI论文写作工具已从“单点辅助”升级为智能化学术研究系统,核心评价维度涵盖文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规等关键指标。本次测评覆盖6款主流工具,测试场景包括中文与英文论文、全流程与专项功能、免费与付费版本&#x…...

Hasklig字体终极指南:多语言编程环境中的完美适配方案

Hasklig字体终极指南:多语言编程环境中的完美适配方案 【免费下载链接】Hasklig Hasklig - a code font with monospaced ligatures 项目地址: https://gitcode.com/gh_mirrors/ha/Hasklig Hasklig是一款专为程序员设计的等宽字体,通过智能连字技…...

JDK 25模块路径在统信UOS/麒麟V10上启动失败?3步定位osgi-container冲突、jni.so符号缺失与jmod签名验签绕过方案

第一章:Java 25 模块化部署国产化适配方案Java 25 引入了更严格的模块系统约束与原生镜像增强能力,为在麒麟V10、统信UOS、openEuler等国产操作系统上实现轻量、安全、可验证的Java应用部署提供了新路径。适配核心聚焦于JVM层兼容性、模块图裁剪、国密算…...

OpenClaw语音控制之语音命令识别系统架构详解

5.1 系统架构总览5.1.1 整体架构OpenClaw 语音命令识别系统是一个基于事件驱动的实时语音处理平台,核心设计目标是实现低延迟、高可靠的语音交互能力。系统采用模块化架构,各组件通过明确定义的接口进行通信,支持多种电话服务提供商&#xff…...

OpenClaw 性能优化:提升响应速度和资源效率

一、引言:OpenClaw 性能挑战与优化价值1.1 为什么需要性能优化OpenClaw 作为运行在用户自有设备上的个人 AI 助手框架,其性能直接影响用户体验:响应延迟:用户发送消息到收到回复的时间资源占用:CPU、内存、磁盘的使用效…...

为什么你的Markdown文档总是乱糟糟?vscode-markdownlint帮你告别格式噩梦

为什么你的Markdown文档总是乱糟糟?vscode-markdownlint帮你告别格式噩梦 【免费下载链接】vscode-markdownlint Markdown linting and style checking for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-markdownlint 你是否曾因…...

z.lua 项目贡献指南:如何参与这个开源工具的开发

z.lua 项目贡献指南:如何参与这个开源工具的开发 【免费下载链接】z.lua :zap: A new cd command that helps you navigate faster by learning your habits. 项目地址: https://gitcode.com/gh_mirrors/zl/z.lua 欢迎来到 z.lua 项目贡献指南!z.…...

图像修复效率提升:设计师与开发者必备的7个开源AI模型应用技巧

图像修复效率提升:设计师与开发者必备的7个开源AI模型应用技巧 【免费下载链接】ComfyUI-BrushNet ComfyUI BrushNet nodes 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BrushNet 在数字创作与内容修复领域,如何快速高效地消除图像瑕疵…...

技术揭秘:SillyTavern角色卡片系统的架构设计与实战应用

技术揭秘:SillyTavern角色卡片系统的架构设计与实战应用 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 在AI角色扮演领域,如何将复杂的角色数据与视觉形象完美融合…...

终极Bash Infinity代码审查指南:确保Bash框架代码质量的完整检查清单

终极Bash Infinity代码审查指南:确保Bash框架代码质量的完整检查清单 【免费下载链接】bash-oo-framework Bash Infinity is a modern standard library / framework / boilerplate for Bash 项目地址: https://gitcode.com/gh_mirrors/ba/bash-oo-framework …...

从理论到代码:手把手实现Newmark-Beta方法的结构动力学模拟

从理论到代码:手把手实现Newmark-Beta方法的结构动力学模拟 结构动力学模拟是现代工程设计与分析中不可或缺的工具,从桥梁抗震到航天器振动分析,都需要精确预测结构在动态载荷下的响应。而Newmark-Beta方法作为这一领域的经典算法&#xff0c…...

从标定板到生产线:OpenCV实战工业相机畸变校正全流程

1. 工业相机畸变:产线精度杀手的前世今生 第一次在产线上看到相机拍出来的零件尺寸和实物差了0.5毫米时,我盯着屏幕愣了三分钟——这个误差足以让整个自动化装配线变成废品生产线。工业相机的畸变就像近视眼没戴眼镜,看到的物体位置和形状都…...

MozJPEG色彩空间扩展终极指南:支持RGBX、BGRX等32位格式的完整教程

MozJPEG色彩空间扩展终极指南:支持RGBX、BGRX等32位格式的完整教程 【免费下载链接】mozjpeg Improved JPEG encoder. 项目地址: https://gitcode.com/gh_mirrors/mo/mozjpeg MozJPEG作为libjpeg-turbo的增强版本,不仅提供了卓越的JPEG压缩性能&a…...

从Netfilter到IPVS:深入解析Linux内核负载均衡的实现与配置

1. Linux内核网络框架与负载均衡基础 当你打开一个网页或使用手机APP时,后台可能有成百上千台服务器在协同工作。这些服务器如何高效分配流量?这就是负载均衡技术的用武之地。在Linux生态中,从Netfilter到IPVS的技术演进,为我们提…...

Kerbrute组合暴力破解:用户名密码组合文件测试的完整教程

Kerbrute组合暴力破解:用户名密码组合文件测试的完整教程 【免费下载链接】kerbrute A tool to perform Kerberos pre-auth bruteforcing 项目地址: https://gitcode.com/gh_mirrors/ke/kerbrute Kerbrute是一款专门用于通过Kerberos预认证进行Active Direct…...

Android14 SurfaceFlinger启动流程与线程调度机制解析

1. SurfaceFlinger的启动入口与初始化流程 Android显示系统的核心服务SurfaceFlinger由init进程启动,这个设计保证了它在系统早期就能准备好图形合成能力。main函数作为入口点,首先做了一系列关键初始化: 设置Binder线程池的最大线程数为4&…...

拒绝PPT运维!实测实在Agent:IT运维服务器监控与故障预警的“降维打击”

摘要: 在2024年IT运维体系全面迈向智能化(AIOps)的背景下,服务器监控与故障预警已不再是简单的指标采集,而是演变为对复杂业务逻辑与AI行为的深度感知。传统监控Agent(如Zabbix、Prometheus)虽稳…...

Zap vs Go:终极后端性能对比测试与实战分析

Zap vs Go:终极后端性能对比测试与实战分析 【免费下载链接】zap blazingly fast backends in zig 项目地址: https://gitcode.com/gh_mirrors/zap/zap Zap 作为一款基于 Zig 语言开发的后端框架,以其 "blazingly fast backends" 为核心…...

破解微信小程序video组件的限制:3种禁止拖动进度条的实战方案对比

微信小程序视频播放控制深度解析:3种禁止拖动进度条的工程化方案 在知识付费和在线教育类小程序中,视频内容的完整播放率直接影响知识传递效果。但微信小程序原生video组件的enable-progress-gesture属性仅能禁用触摸手势,无法真正阻止进度条…...

因果模型评估完全手册:Python指标与验证方法详解

因果模型评估完全手册:Python指标与验证方法详解 【免费下载链接】python-causality-handbook 项目地址: https://gitcode.com/gh_mirrors/py/python-causality-handbook 在数据分析和决策科学领域,因果推断模型的评估是确保模型可靠性与实用性的…...

从WiFi4到WiFi7:一张表格看懂所有代际的真实网速差距(附选购建议)

从WiFi4到WiFi7:四代协议性能全景对比与智能组网决策指南 当你在电商平台搜索"WiFi6路由器"时,超过200款不同价位的设备会瞬间涌入视野。从299元的入门款到4999元的旗舰机型,商家宣传的"AX3000"、"BE6500"等参…...

人脸识别系统如何利用图像质量评估提升准确率?5个实战场景解析

人脸识别系统如何利用图像质量评估提升准确率?5个实战场景解析 在光线昏暗的便利店监控画面中,一位戴着口罩的顾客突然抬头看向摄像头——这个瞬间能否被准确识别,往往取决于系统对人脸图像质量的实时判断能力。图像质量评估(FQA&…...

Hasklig 可变字体终极指南:单一文件实现多字重支持的完整教程

Hasklig 可变字体终极指南:单一文件实现多字重支持的完整教程 【免费下载链接】Hasklig Hasklig - a code font with monospaced ligatures 项目地址: https://gitcode.com/gh_mirrors/ha/Hasklig Hasklig 是一款专为程序员设计的开源代码字体,以…...