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

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

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

所以想着在授权期内将题库"爬"下来, 共享给大家。

因为整个过程蛮有意思, 所以简单记录下。

思路

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

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

实现

自动截图

python 复制代码
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()

看下效果:

去水印

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

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

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

相关推荐
APIshop9 小时前
Python 爬虫获取 item_get_web —— 淘宝商品 SKU、详情图、券后价全流程解析
前端·爬虫·python
AC赳赳老秦12 小时前
Python 爬虫进阶:DeepSeek 优化反爬策略与动态数据解析逻辑
开发语言·hadoop·spring boot·爬虫·python·postgresql·deepseek
泡泡以安15 小时前
【爬虫教程】第7章:现代浏览器渲染引擎原理(Chromium/V8)
java·开发语言·爬虫
Dragon水魅15 小时前
Fandom Wiki 网站爬取文本信息踩坑实录
爬虫·python
Benny的老巢17 小时前
基于Playwright TypeScript/JavaScript的API调用爬虫成熟方案
javascript·爬虫·typescript·自动化·agent·playwright
搂着猫睡的小鱼鱼19 小时前
基于Python的淘宝评论爬虫
开发语言·爬虫·python
嫂子的姐夫20 小时前
010-sha1+base64:爬虫练习网站
爬虫·python·逆向
泡泡以安21 小时前
【爬虫教程】第6章:DNS解析优化与代理池架构
爬虫·架构
小白学大数据1 天前
Redis 在定时增量爬虫中的去重机制与过期策略
开发语言·数据库·redis·爬虫
嫂子的姐夫1 天前
012-AES加解密:某勾网(参数data和响应密文)
javascript·爬虫·python·逆向·加密算法