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-timegen_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
💬 评论