DB_JOB/작업파일/_스크립트/_jangsu_tree.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

51 lines
2.3 KiB
Python

import sys, io, re, ssl, json, urllib.request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
ctx = ssl.create_default_context(); ctx.check_hostname=False; ctx.verify_mode=ssl.CERT_NONE
def fetch(u):
return urllib.request.urlopen(urllib.request.Request(u, headers={'User-Agent':'Mozilla/5.0'}), context=ctx, timeout=25).read().decode('utf-8','replace')
BASE='https://www.jangsu.go.kr/index.jangsu?menuCd='
home = fetch('https://www.jangsu.go.kr/index.jangsu')
# 모든 menuCd + 라벨 (a 태그 안 텍스트/스팬)
pairs={}
for m in re.finditer(r'menuCd=(DOM_000000\d{12})"[^>]*>\s*(?:<span[^>]*>)?\s*([^<]{1,40})', home):
cd, lab = m.group(1), m.group(2).strip()
code = cd[len('DOM_000000'):] # 12 digits
if not lab or lab in ('로그인','새창이동'): continue
if cd not in pairs: pairs[cd]=lab
def parse(code): # 12 digits -> (대,중,소,세부)
return code[0:3], code[3:6], code[6:9], code[9:12]
# 분류
={}; ={}; =[]
for cd,lab in pairs.items():
code=cd[len('DOM_000000'):]
d,e,f,g = parse(code)
if e=='000' and f=='000' and g=='000': [d]=lab
elif f=='000' and g=='000': [d+e]=lab
elif g=='000': .append((d,e,f,cd,lab))
print(f'대분류 {len()} | 중분류 {len()} | 소분류 {len()}')
print('대분류:', [(k,v) for k,v in sorted(.items())])
print('\n중분류 표본:', [(k,v) for k,v in sorted(.items())][:15])
# 소분류 트리 (대>중>소)
print('\n소분류 트리(앞 25):')
q='?'
for d,e,f,cd,lab in sorted()[:25]:
print(' '+.get(d,q)+' > '+.get(d+e,q)+' > '+lab+' ['+cd+']')
# 탭 fetch 테스트 — 차량등록(101005001000)
test=fetch(BASE+'DOM_000000101005001000')
taps=re.findall(r'<ul class=\"taps[^\"]*\">(.*?)</ul>', test, re.S)
if taps:
items=re.findall(r'menuCd=(DOM_000000\d{12})\"[^>]*>(?:<span>)?([^<]+)', taps[0])
print('\n차량등록 본문탭:', [(c[-6:],t.strip()) for c,t in items])
else:
print('\n차량등록 탭 없음(정적). 본문 일부:', re.sub(r'\s+',' ',re.sub(r'<[^>]+>','',test))[:200])
json.dump({'':,'':,'':[list(x) for x in ],'pairs':pairs},
open(r'D:\01.프로젝트\DB수집\작업파일\_스크립트\_jangsu_tree.json','w',encoding='utf-8'), ensure_ascii=False, indent=1)
print('\nsaved _jangsu_tree.json')