--- title: "00-auto_gen" created: 2026-04-02 tags: - 项目 aliases: - auto_gen --- # auto_gen > 这是一个**自动化的 HTML 列表解析系统**,核心思路是"为每个网站生成专属的解析函数",用来从各大学就业网的公告列表页中批量提取招聘信息。 ## 问题背景 每所学校的就业网页面结构都不一样,比如: - `gen_00001.py`:找 `ul.infoList` → `li.span7` 里的链接和 `li.span4` 里的时间 - `gen_00002.py`:找 `ul.newsList` → `li.span2.y` 里的时间 - `gen_00003.py`:找 `#data_html .item` → `.item-text a` 和 `.item-time` - `gen_00004.py`:找所有 `li` → 里面的 `i.list-time` 每个文件对应一所学校,逻辑完全不同,但对外接口完全一致——都叫 `extract_table_from_html(htmlcontext, tempfile)`,输出统一的 JSON 格式(`announcement_name` / `publish_time` / `link`)。 --- ## 三个模块的分工 [[03-gen_000xx|gen_000xx]] 是各个学校专属的解析函数,手写或大模型生成,每所学校一个文件。 [[03-func_gen_bygpt|func_gen_bygpt]] 是"兜底生成器"。当某个学校的解析结果为空时,把该学校的 HTML 样本发给 GPT-4o,让大模型自动写出一个新的 `gen_00xxx.py` 文件。生成的代码文件命名为 `gen_func_code_{key}_tmp.py`,并做了幂等保护——如果文件已存在就跳过,不重复调用大模型。 [[02-func_call|func_call]] 是运行时调度器。用 `importlib` 动态加载指定的 `gen_` 模块,调用里面的 `extract_table_from_html`,执行完后检查结果:如果 JSON 结果为空,则触发 `func_gen_bygpt` 去让大模型生成新的解析代码。 ## 完整流程 ```text 爬取到学校页面 HTML │ ▼ func_call.py → 动态加载 gen_0000x.py → 执行 extract_table_from_html │ ├─ 成功,输出 JSON ──→ 返回公告列表 │ └─ 结果为空 │ ▼ func_gen_bygpt.py → 调用 GPT-4o → 生成新的 gen_func_code_xxx_tmp.py │ └─ 人工审核后重命名为正式的 gen_0000x.py 复用 ``` 本质上是一套"**规则不够,大模型来补**"的自适应爬虫架构:已知学校用现成的手写解析函数,遇到新学校的未知页面结构时自动生成代码,而不需要人工介入每一个新网站。 --- **项目分区导航**:[[06-html_to_text|html_to_text]] ⬅️ | 00-auto_gen | ➡️ [[01-func_call|func_call]]