공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
34 lines
1.6 KiB
Python
34 lines
1.6 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
|
|
h = urllib.request.urlopen(urllib.request.Request('https://www.jangsu.go.kr/index.jangsu', headers={'User-Agent':'Mozilla/5.0'}), context=ctx, timeout=50).read().decode('utf-8','replace')
|
|
|
|
# 중분류 라벨: 106XXX000000 링크 안/근처의 span 텍스트 (img/icon 사이 허용)
|
|
mid = {}
|
|
for m in re.finditer(r'menuCd=DOM_000000(\d{6})000000"[^>]*>(.*?)</a>', h, re.S):
|
|
code = m.group(1) # 대3+중3
|
|
inner = m.group(2)
|
|
sp = re.findall(r'<span[^>]*>([^<]+)</span>', inner)
|
|
lab = next((s.strip() for s in sp if s.strip()), '')
|
|
if code[3:] != '000' and lab and code not in mid:
|
|
mid[code] = lab
|
|
|
|
tree = json.load(open(r'D:\01.프로젝트\DB수집\작업파일\_스크립트\_jangsu_tree.json', encoding='utf-8'))
|
|
old = dict(tree['중'])
|
|
# 병합: 새로 찾은 라벨로 보강
|
|
added = {}
|
|
for code, lab in mid.items():
|
|
if code not in old or not old.get(code):
|
|
added[code] = lab
|
|
old.update(mid)
|
|
tree['중'] = old
|
|
json.dump(tree, open(r'D:\01.프로젝트\DB수집\작업파일\_스크립트\_jangsu_tree.json','w',encoding='utf-8'), ensure_ascii=False, indent=1)
|
|
|
|
print('중분류 총:', len(old))
|
|
print('새로 채운 중분류:', len(added))
|
|
for k,v in sorted(added.items()): print(f' {k} = {v}')
|
|
# 분야별정보(106) 중분류 확인
|
|
print('\n분야별정보(106) 중분류:')
|
|
for k,v in sorted(old.items()):
|
|
if k.startswith('106'): print(f' {k} = {v}')
|