auto_gen

这是一个自动化的 HTML 列表解析系统,核心思路是"为每个网站生成专属的解析函数",用来从各大学就业网的公告列表页中批量提取招聘信息。

问题背景

每所学校的就业网页面结构都不一样,比如:

  • gen_00001.py:找 ul.infoListli.span7 里的链接和 li.span4 里的时间
  • gen_00002.py:找 ul.newsListli.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)。


三个模块的分工

gen_000xx 是各个学校专属的解析函数,手写或大模型生成,每所学校一个文件。

func_gen_bygpt 是"兜底生成器"。当某个学校的解析结果为空时,把该学校的 HTML 样本发给 GPT-4o,让大模型自动写出一个新的 gen_00xxx.py 文件。生成的代码文件命名为 gen_func_code_{key}_tmp.py,并做了幂等保护——如果文件已存在就跳过,不重复调用大模型。

func_call 是运行时调度器。用 importlib 动态加载指定的 gen_ 模块,调用里面的 extract_table_from_html,执行完后检查结果:如果 JSON 结果为空,则触发 func_gen_bygpt 去让大模型生成新的解析代码。

完整流程

爬取到学校页面 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 复用

本质上是一套"规则不够,大模型来补"的自适应爬虫架构:已知学校用现成的手写解析函数,遇到新学校的未知页面结构时自动生成代码,而不需要人工介入每一个新网站。


项目分区导航html_to_text ⬅️ | 00-auto_gen | ➡️ func_call