自学内容网 自学内容网

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

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

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

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

思路

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

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

在这里插入图片描述

实现

自动截图

import glob
import os.path
import time

import pyautogui

tx_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 os

from 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)) < threshold


origin_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.size

    for 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,方便传播,使用教程就不赘述了,网上有很多。

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


原文地址:https://blog.csdn.net/Young4Dream/article/details/144252276

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!