--- title: "02-func_call" created: 2026-04-02 tags: - 项目 aliases: - func_call --- # func_call.py ### `func_call.py` — 运行时调度器(大公司版) 与 [[01-func_call|auto_gen 的 func_call]] 同源,面向大公司招聘页面的解析调度:动态加载解析函数 → 执行 → 结果为空触发大模型重新生成。 ## 代码 ```python import importlib import sys sys.path.append('../') import json from auto_gen_com.func_gen_bygpt import gen_func_bygpt from utils import ner_logger # 动态加载模块并执行解析函数,异常时写入空数组,最后校验结果 def load_and_execute(module_name, func_name, html_content, tmp_file): # 动态导入指定模块 module = importlib.import_module(module_name) # 获取模块中指定名称的函数 func = getattr(module, func_name) # 执行解析函数 try: func(html_content, tmp_file) except Exception as e: # 执行失败则写入空JSON列表,保证文件格式合法 with open(tmp_file, 'w', encoding='utf-8') as f: f.write("[]") ner_logger.error(f"执行解析html文件失败:{tmp_file}{e}!") # 校验解析结果并返回成功状态 return check_result(module_name, html_content, tmp_file) # 检查解析结果是否有效,为空则重新生成解析函数 def check_result(module_name, html_content, tmp_file): # 读取解析输出文件 with open(tmp_file, 'r', encoding='utf-8') as f: result = f.read() result_json = [] try: # 转换为JSON对象 result_json = json.loads(result) # 解析结果为空,触发大模型重新生成解析函数 if len(result_json) == 0: gen_func_bygpt(module_name, html_content) except: ner_logger.error(f"执行解析html文件失败:{tmp_file},人工处理!") # 有数据返回True,无数据返回False if len(result_json) == 0: return False return True # 外部调用入口:加载自动生成的解析函数并执行 def call_func(func_name, html_content, tmp_fname): tmp_file = tmp_fname # 执行动态加载和解析 _ok = load_and_execute(func_name, 'extract_table_from_html', html_content, tmp_file) return _ok # 动态执行页面爬虫函数,返回执行结果 def execute_page_action(module_name, page): # 动态导入爬虫模块 module = importlib.import_module(module_name) # 获取页面爬取函数 func = getattr(module, "crawl_page") # 执行并返回结果 try: return func(page) except Exception as e: ner_logger.error(f"执行动作错误:{module_name}{e}!") return False # 动态执行首页爬虫,返回抓取的URL列表 def execute_index_action(module_name, page, sch_info): urls = [] # 动态导入爬虫模块 module = importlib.import_module(module_name) # 获取首页爬取函数 func = getattr(module, "crawl_page") # 执行爬虫获取链接列表 try: urls = func(page, sch_info) except Exception as e: ner_logger.error(f"执行动作错误:{module_name} {e}!") return urls # 使用示例 # 假设有一个名为 example.py 的文件,其中包含一个名为 example_function 的函数 # load_and_execute('gen_00001', 'extract_table_from_html',"",'a.txt') ``` --- **项目分区导航**:[[01-click_50001|click_50001]] ⬅️ | 02-func_call | ➡️ [[03-func_gen_bygpt|func_gen_bygpt]]