低级爬虫实现-记录HCIP云架构考试

因工作需要考HCIP云架构(HCIP-Cloud Service Solution Architect)证书, 特意在淘宝上买了题库, 考过了。

事后得知自己被坑了, 多花了几十大洋。

所以想着在授权期内将题库“爬”下来, 共享给大家。
因为整个过程蛮有意思, 所以简单记录下。

思路

题库是以微信小程序的形式出现, 我不会真正的网络爬虫, 也不知道微信小程序怎么爬,所以想着通过截图+OCR的方式将其转换成文字,整理成markdown形式, 再通过mkdoc转换成网页。

题库有答题模式和背题模式,也有按照题型进行分类,我们选择背题模式, 以单选题为例。

在这里插入图片描述

实现

自动截图

import glob
import os.path
import timeimport pyautoguitx_dict = {'1': '单选','2': '多选','3': '判断','4': '填空',
}
tx = input("输入题型编号(1.单选 2.多选 3.判断 4.填空):\n")lx = tx_dict.get(tx)
if not lx:raise Exception()
output_dir = f'output/{lx}'
os.makedirs(output_dir, exist_ok=True)# 计算翻页次数
nums = int(input('输入题目数量:\n'))def next_page():"""模拟滑动到下一页:return:"""pyautogui.moveTo(560, 1000)pyautogui.dragTo(60, 1000, 0.2, button='left')time.sleep(1)if __name__ == '__main__':for i in range(0, nums):pyautogui.screenshot(f"{output_dir}/{i}.png", region=(32, 266, 750, 1310))next_page()

看下效果:
在这里插入图片描述

去水印

采集水印色素, 对相似度接近的色素进行白色替换处理:

import glob
import osfrom PIL import Image# 设置一个颜色差异阈值,这里以50为例
threshold = 50
# 水印色素
watermark_rgb = (232, 232, 232)def abs_delta(r1, g1, b1, target):return (abs(target[0] - r1) + abs(target[1] - g1) + abs(target[2] - b1)) < thresholdorigin_file_pattern = f"output/单选/*.png"
target_dir = f"output/单选/water"
os.makedirs(target_dir, exist_ok=True)
pngs = glob.glob(origin_file_pattern)
for png in pngs:img = Image.open(png)# 获取图片的宽度和高度width, height = img.sizefor y in range(height):for x in range(width):r, g, b = img.getpixel((x, y))if abs_delta(r, g, b, watermark_rgb):img.putpixel((x, y), (255, 255, 255))  # 将接近白色的像素改为白色,也可改为背景色近似值# 保存处理后的图片,将输出路径替换为实际想要保存的地方output_path = f"{target_dir}/{os.path.basename(png)}"img.save(output_path)

效果如下:

在这里插入图片描述

OCR

由于图片较多,对批量处理和准确度要求较高, 通过比较各种工具, 最终选择了Umi-OCR

使用比较简单, 截个图示意一下就行了:

在这里插入图片描述

校正

输出文字后就是漫长的文字校正过程了, 包括识别错误、换行处理等等

生成文档

我选择的是mkdocs,主要用来生成静态网页,类似于gitbook,方便传播,使用教程就不赘述了,网上有很多。

效果也不展示了, 因为我还在漫长的校正步骤中,哪位大神有好的校正方法可以联系我呀,痛苦如狗!!!!!!!!!

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

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

相关文章

Scala—Sliding(滑动窗口)用法详解

Scala—Sliding&#xff08;滑动窗口&#xff09;用法详解 Scala 的 sliding 方法在处理集合时&#xff0c;可以方便地获取一个集合的“滑动窗口”&#xff08;能够按照指定的窗口大小和步长从集合中获取子集合&#xff09;。 sliding 方法定义&#xff1a; def sliding(size…

一、理论基础-PSI

之前参加了隐语第2期&#xff0c;对隐语SecretFlow框架有了大致的了解&#xff0c;这次参加隐语第4期&#xff0c;学习下PSI和PIR。 一、PSI定义 首先介绍PSI的定义&#xff0c;PSI&#xff08;隐私集合求交&#xff0c;Private Set Intersection即PSI)是安全多方计算&#x…

11.15【JAVA】【网络编程】【DEBUG】

代码以开源至cqujk/CquJavaEE 的myExp-socketCode分支,欢迎拷打 参考REPO Java 11: Standardized HTTP Client API 没反应 这是因为这应当是两个线程,当server创建好套接字后,进入accept时,就不会继续向下运行,客户端自然也就无法发送请求 首先要保证server进入accept(这个…

国家信息中心单志广:智慧城市转型中的数据要素价值释放

今日&#xff0c;由中国电信集团主办的2024数字科技生态大会数据要素合作论坛在广州市举办。国家发改委国家信息中心信息化和产业发展部主任单志广在论坛发展主旨演讲&#xff1a;智慧城市转型中的数据要素价值释放&#xff0c;主要包括发展新形势、数据新要素、数据新产权、数…

RTSP摄像头8K超高清使用场景探究和播放器要求

技术背景 8K 分辨率拥有7680x4320像素&#xff0c;像素数量是4K的四倍、1080P 的16倍。这意味着它能够呈现出极其清晰、细腻的图像&#xff0c;观众可以看到更多的细节&#xff0c;比如在体育赛事直播中&#xff0c;运动员的表情、动作细节&#xff0c;赛场上的微小标识等都能…

SpringBoot整合Mockito进行单元测试超全详细教程 JUnit断言 Mockito 单元测试

Mock概念 Mock叫做模拟对象&#xff0c;即用来模拟未被实现的对象可以预先定义这个对象在特定调用时的行为&#xff08;例如返回值或抛出异常&#xff09;&#xff0c;从而模拟不同的系统状态。 导入Mock依赖 pom文件中引入springboot测试依赖&#xff0c;spring-boot-start…

车机端同步outlook日历

最近在开发一个车机上的日历助手&#xff0c;其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现&#xff0c;毕竟手机日历是手机厂商自己带的系统应用&#xff0c;根本不能和车机端实现数据同步的。 那么只能去其他公共的平台寻求一些机会&…

多人聊天室 NIO模型实现

NIO编程模型 Selector监听客户端不同的zhuangtai不同客户端触发不同的状态后&#xff0c;交由相应的handles处理Selector和对应的处理handles都是在同一线程上实现的 I/O多路复用 在Java中&#xff0c;I/O多路复用是一种技术&#xff0c;它允许单个线程处理多个输入/输出&…

电商产品自动化测试实战—解锁高效测试新技能

在这个数字化时代&#xff0c;电子商务行业的竞争愈发激烈&#xff0c;产品品质和稳定性成为了企业赢得市场的关键。而高质量的测试工作&#xff0c;正是确保产品品质和稳定性的重要保障。为此&#xff0c;我们特别推出了一场电商产品自动化测试实战公开课&#xff0c;旨在帮助…

【JavaWeb后端学习笔记】Mybatis基础操作以及动态SQL(增、删、改、查)

Mybatis 0、环境准备0.1 准备数据库表emp&#xff1b;0.2 准备SpringBoot工程0.3 配置文件中引入数据库连接信息0.4 创建对应的实体类0.5 准备Mapper接口 1、MyBatis基础操作1.1 删除1.2 新增&#xff08;主键返回&#xff09;1.3 更新1.4 查询&#xff08;解决字段名与类属性名…

SpringBoot该怎么使用Neo4j - 优化篇

文章目录 前言实体工具使用 前言 上一篇中&#xff0c;我们的Cypher都用的是字符串&#xff0c;字符串拼接简单&#xff0c;但存在写错的风险&#xff0c;对于一些比较懒的开发者&#xff0c;甚至觉得之间写字符串还更自在快速&#xff0c;也确实&#xff0c;但如果在后期需要…

如何用AI生成胶片风格的场景图 - 实用教程

如何用AI生成胶片风格的场景图 - 实用教程 在这个教程中,我们将介绍如何使用Recraft AI生成复古胶片风格的场景图。通过简单的步骤,你就能创建出独特的复古风格图片。 成功案例展示 小红书爆火作品 11月22日,小红书博主"四月崔aprilchui"发布胶片风格的场景图…

在M3上面搭建一套lnmp环境

下载docker-desktop 官网下载docker-desktop 切换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docke…

思特奇亮相2024数字科技生态大会,以“智”谋新共赢AI新时代

12月3-5日,2024数字科技生态大会在广州琶洲广交会展馆D区盛大举行。大会以“AI赋能 共筑数字新生态”为主题,汇聚行业领军企业、创新型科技公司以及众多专家学者,共探数字经济时代未来发展新机遇。 作为中国电信长期重要的生态伙伴,思特奇受邀参会并亮相18.2号馆天翼AI展区,重点…

【全网最新】若依管理系统基于SpringBoot的前后端分离版本开发环境配置

目录 提前准备&#xff1a; 下载源代码 设置依赖 设置后台连接信息 运行后台 运行前端 安装npm依赖 启动前端 登录网页客户端 提前准备&#xff1a; 1、安装mysql 5以上就可以。 2、安装redis. 3、安装npm npm下载地址&#xff1a;https://nodejs.org/dist/v22.12…

远程游戏新体验!

在这个数字化的时代&#xff0c;游戏已经不仅限于家里的电视或书房的电脑了。远程游戏&#xff0c;也就是通过远程控制软件在不同地点操作游戏设备&#xff0c;给玩家带来了前所未有的自由和灵活性。RayLink远程控制软件&#xff0c;凭借其出色的性能和专为游戏设计的功能&…

【人工智能】Transformers之Pipeline(二十八):视觉问答(visual-question-answering)

​​​​​​​ 目录 一、引言 二、视觉问答&#xff08;visual-question-answering&#xff09; 2.1 概述 2.2 dandelin/ViLT 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.3.3 pipeline对象返回参数 2.4 pipeline实战 2.5 模型…

qt QPrinter详解

1、概述 QPrinter类是Qt框架中用于打印输出的绘图设备。它表示打印出来的一系列页面&#xff0c;并提供了一组附加功能来管理特定于设备的特性&#xff0c;比如方向和分辨率。QPrinter可以生成PDF文档&#xff0c;也可以将内容发送到打印机进行实际打印。它继承自QPagedPaintD…

AI开发: 知识图谱的初识,学会制作知识图谱- Python 机器学习

一、知识图谱的概念 知识图谱是一个通过图结构来表示和组织知识的工具&#xff0c;它将事物、概念和它们之间的关系以图的形式呈现出来&#xff0c;图中的节点代表实体&#xff08;比如人物、地点、事件等&#xff09;&#xff0c;而边代表这些实体之间的各种关系&#xff08;…

移动端登录注册界面样式,简洁切换

非常简洁的登录、注册界面模板&#xff0c;使用uni-app编写&#xff0c;直接复制粘贴即可&#xff0c;无任何引用&#xff0c;全部公开。 废话不多说&#xff0c;代码如下&#xff1a; login.vue文件 <template><view class"content"><view class&quo…