#!/usr/bin/env python3
"""批量修复 61 个含 html_table_to_markdown 的脚本 → html_table_to_html
在服务器 /root/gov_crawler 下运行:
    python3 batch_fix_tables.py
"""
import os, re, glob, ast

DIR = '/root/gov_crawler'

NEW_FN = '''def html_table_to_html(table, base_url=""):
    """保留 HTML 表格结构，仅将相对链接/图片转绝对 URL"""
    tbl = BeautifulSoup(str(table), 'html.parser')
    for a in tbl.find_all('a'):
        href = a.get('href', '')
        if href and not href.startswith(('http', 'javascript', '#')):
            a['href'] = urllib.parse.urljoin(base_url, href) if base_url else href
    for img in tbl.find_all('img'):
        src = img.get('src', '')
        if src and not src.startswith(('http', '//', 'data:')):
            img['src'] = urllib.parse.urljoin(base_url, src) if base_url else src
    return str(tbl)'''

fixed, skipped = [], []
for path in sorted(glob.glob(os.path.join(DIR, 'crawl_*.py'))):
    s = open(path).read()
    if 'def html_table_to_markdown(' not in s:
        continue
    try:
        start = s.index('def html_table_to_markdown(')
        # 找到函数结束（下一个顶层 def）
        end = s.index('\ndef ', start + 4)
        new_s = s[:start] + NEW_FN + '\n\n' + s[end:]
        # 替换所有调用处（含 def 行本身已处理，这里只替换调用）
        new_s = re.sub(r'html_table_to_markdown\(', 'html_table_to_html(', new_s)
        ast.parse(new_s)
        open(path, 'w').write(new_s)
        fixed.append(os.path.basename(path))
    except Exception as e:
        skipped.append((os.path.basename(path), str(e)))

print(f"FIXED ({len(fixed)}):")
for f in fixed:
    print('  ', f)
if skipped:
    print(f"SKIPPED ({len(skipped)}):")
    for f, e in skipped:
        print('  ', f, e)
