DB_JOB/작업파일/공공기관2/_hf_infolist.py
hehihoho3 df16c98366 백업: DB수집 전체 스냅샷 (공공기관2 정리 전)
공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:15:40 +09:00

43 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
"""주택금융 정보목록 3보드 분류 카테고리별 건수 수집 → _hf_cat.json."""
import sys, io, json, re
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
from playwright.sync_api import sync_playwright
BOARDS = [
("표준정보목록", "https://www.hf.go.kr/ko/sub06/sub06_04_01.do"),
("고유정보목록", "https://www.hf.go.kr/ko/sub06/sub06_04_02.do"),
("즐겨찾는목록", "https://www.hf.go.kr/ko/sub06/sub06_04_03.do"),
]
CATS = [("전체",""),("감사","24"),("윤리","25"),("기획","26"),("재정","27"),("법무","28"),
("노무","29"),("인사","30"),("총무","31"),("회계","32"),("정보화","33"),("홍보","34"),("대외","35")]
CNT_JS = """
() => {
// 총건수: 'X건' or pager last page * perpage. 우선 텍스트 'X 건'/'총 X'
const t=document.body.innerText;
let m=t.match(/총\\s*([0-9,]+)\\s*건/) || t.match(/전체\\s*([0-9,]+)\\s*건/) || t.match(/([0-9,]+)\\s*건/);
// 게시판 목록 행수(현재페이지)
const rows=document.querySelectorAll('table tbody tr, ul.board-list li, .board_list li').length;
return JSON.stringify({tot:m?m[1].replace(/,/g,''):null, rowsOnPage:rows});
}
"""
out = {}
with sync_playwright() as p:
br = p.chromium.launch(headless=True)
pg = br.new_context(ignore_https_errors=True, viewport={'width':1600,'height':1000}).new_page()
for bname, burl in BOARDS:
out[bname] = {"url": burl, "cats": []}
for cname, cv in CATS:
u = f"{burl}?mode=list&srCategoryId={cv}" if cv else f"{burl}?mode=list"
try:
pg.goto(u, wait_until='domcontentloaded', timeout=20000); pg.wait_for_timeout(600)
r = json.loads(pg.evaluate(CNT_JS))
except Exception as e:
r = {"tot": None, "rowsOnPage": 0, "err": str(e)[:40]}
out[bname]["cats"].append({"name": cname, "v": cv, "tot": r.get("tot"), "rows": r.get("rowsOnPage")})
print(f" {bname} {cname}({cv}): tot={r.get('tot')} rows={r.get('rowsOnPage')}")
br.close()
json.dump(out, open("_hf_cat.json","w",encoding="utf-8"), ensure_ascii=False, indent=1)
print("saved _hf_cat.json")