我用 ChatGPT 起手、脚本改造,给孩子做了一个绘本

儿子刚满两岁,最喜欢的就是挖掘机、推土机、吊车这些工程车。

每天早上,他都会兴奋地指着马路边的施工现场喊:"爸爸!挖掘机!!"

看着他一边跳一边模仿机械臂挥舞的样子,我心都要化了。

作为一名前端程序员,我开始思考:
有没有一种办法,可以给他源源不断地"生成"工程车绘本呢?

灵感:用 AI + 前端技术做一本绘本

目标是构建一个「可以无限生成内容」的电子绘本:

  • 输入关键词(如"excavator")即可拉取图文内容
  • 使用 AI 生成生动的中文配文
  • 手机 / 平板上滑动查看
  • 全前端实现,离线可读

项目结构:4个各段构建「可生长绘本」

第一步:用 ChatGPT 获取关键词

我先和 ChatGPT 互动,列出了一些工程车相关的关键词,示例:

json 复制代码
["Excavator", "Crane", "Bulldozer", "Dump Truck", "Steamroller"]

这些关键词会作为后续图像抓取的入口。

第二步:AI生成Python代码 + Selenium 抓取图片与标签

使用 Python + Selenium 模拟真实浏览器访问 Pixabay,抓取关键词对应的图片与标签信息。页面是 Ajax 加载+懒加载,需要模拟滚动行为来触发加载。

基础代码是ChatGPT生成的,当然代码存在一些问题,自己在理解的基础上通过对话的方式让copilot补充和完善,真正自己写的代码寥寥无几。

代码做几件事:

  • 通过 webdriver 打开chrome 浏览器并访问制定的网页
  • 持续滚动到网页底部,等待图片数据异步加载完毕
  • 抓取图片+信息
  • 待所有数据抓取完毕,生成一份 json文件到本地

完整脚本如下(含注释):

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time, json

print("脚本启动...")

def setup_browser(headless=True):
    # 设置 Chrome 浏览器选项
    options = Options()
    if headless:
        options.add_argument("--headless")  # 无界面模式
        options.add_argument("--disable-gpu")
    options.add_argument("--log-level=3")  # 忽略日志
    options.add_argument("--window-size=1920,1080")
    driver = webdriver.Chrome(options=options)
    return driver

def crawl_pixabay_images(keyword, max_images=30):
    driver = setup_browser(headless=False)

    # 构建目标链接
    url = f"https://pixabay.com/images/search/{keyword}/"
    driver.get(url)
    print(f"正在访问: {url}")

    # 等待初始页面加载
    time.sleep(5)

    # 滚动加载页面更多图片
    SCROLL_PAUSE_TIME = 3
    windowHeight = driver.execute_script("return document.documentElement.clientHeight")
    scrollHeight = driver.execute_script("return document.documentElement.scrollHeight")
    scrollUnit = int(windowHeight / 3)

    while windowHeight + driver.execute_script("return document.documentElement.scrollTop") < scrollHeight:
        print("等待滚动...")
        time.sleep(SCROLL_PAUSE_TIME)
        driver.execute_script("window.scrollBy(0, arguments[0])", scrollUnit)
        print("滚动了一次!")
        scrollHeight = driver.execute_script("return document.documentElement.scrollHeight")

    # 定位所有图片容器
    image_containers = driver.find_elements(By.CSS_SELECTOR, "div.cell--UMz-x div.container--MwyXl")

    images_data = set()

    for container in image_containers:
        try:
            # 抓取图片与标签
            img = container.find_element(By.CSS_SELECTOR, "a.link--WHWzm img")
            tag_elements = container.find_elements(By.CSS_SELECTOR, "div.tags--lDvZS a")
            img_src = img.get_attribute("src")
            tags_text = [tag.get_attribute("textContent") for tag in tag_elements]

            print(f"抓到标签: {tags_text}")
            print(f"抓到图片: {img_src}")

            if img_src and img_src.startswith("https://cdn.pixabay.com"):
                images_data.add((tuple(tags_text), img_src))

            if len(images_data) >= max_images:
                break
        except Exception as e:
            print("抓取失败:", e)
            continue

    driver.quit()
    return list(images_data)

if __name__ == "__main__":
    keywords = ["Excavator", "Crane"]  # 可扩展
    all_results = []

    for keyword in keywords:
        results = crawl_pixabay_images(keyword)
        print(f"共抓取 {len(results)} 张图片,关键词:{keyword}")
        all_results.append({
            "keyword": keyword,
            "results": [
                {
                    "tags": list(tags),
                    "img_src": src
                } for tags, src in results
            ]
        })

    # 保存为 JSON 文件
    with open("craw_results.json", "w", encoding="utf-8") as f:
        json.dump(all_results, f, ensure_ascii=False, indent=2)
    print("已写入 craw_results.json 文件")

第三步:结合提示词,引导 ChatGPT 生成中文配文(半自动)

这一步是「生成内容」的关键。

我不是给 ChatGPT 一张图一张图地描述,而是直接把上述代码生成的结构化JSON 贴进去 + 加提示词,引导它按结构返回结果。

示例输入结构:

json 复制代码
{
  "keyword": "excavator",
  "results": [
    {
      "tags": ["Excavator", "Building"],
      "img_src": "https://cdn.pixabay.com/..."
    }
  ]
}

提示词模板:

我在开发一本儿童绘本,供 2~4 岁小孩阅读。

你将接收一组图片的分类和标签信息,帮我为每张图生成生动有趣的中文配文。

要求如下:

  • 避免具体描述图片细节
  • 配文需适合小朋友理解
  • 输出格式为带 description 字段的原始 JSON 结构

实践经验提示:

一次性喂太多 JSON 容易:

  • 超出 token 限制导致中断
  • 漏生成部分条目
  • 输出结构错乱

所以我建议你:先提取所有关键词 + 标签组,让 ChatGPT 只根据这些标签生成中文配文句子,然后再将这些配文跟图片信息对应起来

第四步:用 swiper.js 做成绘本页

将添加好配文的最终JSON 文件嵌入 HTML,使用 swiper.js 实现滑动式阅读体验,打开 html 就能看。

效果展示

只需在终端运行脚本:python3 crawl.py 便会运行并打开 chrome 浏览器,滚动、并抓取图片,最终输出一份 json 文件。

实现了脚本 ✔ 结构自动拉图

✔ 配文借助 GPT 半自动生成

✔ 本地浏览,无需部署

✔ 响应式适配移动端

体验地址:jebben.cn/site/childr...

结尾

整个项目从开始做到完成花费了小半天,让我不得不感叹AI协助的力量,如果没有 ChatGPT等 AI 工具,莫说半天,一天可能也无法完成,光查询资料处理异常问题或者未知的知识点就够我忙一壶的了。

这个项目不算复杂,但很有意义。它让我意识到:

技术也可以被拿来做很温柔的事。

这是我送给儿子的一个小礼物,同时也送给了我自己一个很小但真实的成就感。

下一步我可能会考虑,加入语音朗读(Web Speech API)功能,点击按钮读一下。

如果大家需要源码,我可以上传到github贴到评论里。

相关推荐
前端小咸鱼一条几秒前
React中的this绑定
前端·javascript·react.js
影子信息6 分钟前
vue vxe-table :edit-config=“editConfig“ 可以编辑的表格
前端·javascript·vue.js
YGY Webgis糕手之路7 分钟前
Cesium 快速入门(四)相机控制完全指南
前端·经验分享·笔记·vue·web
JavaDog程序狗10 分钟前
【软件环境】Windows安装NVM
前端·node.js
黑土豆13 分钟前
为什么我要搞一个Markdown导入组件?说出来你可能不信...
前端·javascript·markdown
前端小巷子15 分钟前
Vue 2 响应式系统
前端·vue.js·面试
典学长编程30 分钟前
前端开发(HTML,CSS,VUE,JS)从入门到精通!第一天(HTML5)
javascript·css·html·html5
前端小咸鱼一条32 分钟前
React的基本语法和原理
前端·javascript·react.js
qq_2787877732 分钟前
Golang 调试技巧:在 Goland 中查看 Beego 控制器接收的前端字段参数
前端·golang·beego
YGY Webgis糕手之路32 分钟前
Cesium 快速入门(六)实体类型介绍
前端·经验分享·笔记·vue·web