DB_JOB/작업파일/완료/광역_사이트맵/전북특별자치도/8.완주군/_silguk.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

81 lines
4.7 KiB
Python

# -*- coding: utf-8 -*-
import openpyxl,copy,sys
sys.stdout.reconfigure(encoding='utf-8')
F='전북특별자치도_완주군.xlsx'
B='https://www.wanju.go.kr/index.9is?contentUid='
# (label, url, L) L: 'p'=페이지 's'=사이트
KIDS=[
('기획예산실',B+'ff8080818b024d8e018b274f9e492de5','p'),('감사담당관',B+'ff8080818b024d8e018b274f9f402dec','p'),
('수소신산업담당관',B+'ff8080818b024d8e018b274fa04a2df3','p'),('행정지원과',B+'ff8080818b024d8e018b274fa1602dfa','p'),
('인구정책과',B+'4028a602975891f70197bf9089d77bae','p'),('교육정책과',B+'ff8080818b024d8e018b274fa3762e08','p'),
('아동친화과',B+'4028a602975891f70197bf98553c7e0d','p'),('재정관리과',B+'ff8080818b024d8e018b274fa8f42e1d','p'),
('열린민원과',B+'ff8080818b024d8e018b274fa9fc2e24','p'),('문화역사과',B+'ff8080818b024d8e018b274fa6932e0f','p'),
('관광축제과',B+'ff8080818b024d8e018b274fa7ba2e16','p'),('체육공원과',B+'4028a602975891f70197bfa1064100eb','p'),
('사회복지과',B+'ff8080818b024d8e018b274fa2772e01','p'),('경로장애인과',B+'4028a6028d7e94de01905d4e5efa0a2c','p'),
('경제정책과',B+'ff8080818b024d8e018b274fabff2e32','p'),('농업정책과',B+'ff8080818b024d8e018b274facff2e39','p'),
('자원순환과',B+'ff8080818b024d8e018b274fae162e40','p'),('환경위생과',B+'ff8080818b024d8e018b274fb0702e47','p'),
('산림녹지과',B+'ff8080818b024d8e018b274fb19c2e4e','p'),('축산지원과',B+'4028a602975891f70197bfad92b10547','p'),
('건설도시과',B+'ff8080818b024d8e018b274fb2a12e55','p'),('재난안전과',B+'ff8080818b024d8e018b274fb3b62e5c','p'),
('도로교통과',B+'ff8080818b024d8e018b274fb4bf2e63','p'),('하천기반과',B+'ff8080818b024d8e018b274fb5c92e6a','p'),
('건축과',B+'ff8080818b024d8e018b274fb6d92e71','p'),
('보건소','https://www.wanju.go.kr/health/index.9is','s'),
('농업기술센터','https://www.wanju.go.kr/atc/index.9is','s'),
('완주산업단지사무소',B+'ff8080818b024d8e018b274fb8322e7a','p'),
('상하수도사업소',B+'ff8080818b024d8e018b274fb94b2e81','p'),
('도서관사업소',B+'ff8080818b024d8e018b274fba5a2e88','p'),
('완주군 시설관리공단','https://www.wjss.or.kr/index.do','s'),
('완주미래행복센터',B+'ff8080818b024d8e018b274fbb882e8f','p'),
('완주경제센터','http://www.wanju.go.kr/economy','s'),
('완주관광체육마케팅센터',B+'ff8080818b024d8e018b274fbde92e9d','p'),
('완주귀농귀촌지원센터','https://www.wanjuro.org/','s'),
]
wb=openpyxl.load_workbook(F); src=wb.active
# 710 찾기 (E=실국과/사업소)
P=None
for r in range(3,src.max_row+1):
if src.cell(r,5).value=='실국과/사업소': P=r; break
CCOL=6 # F
C=src.cell(711,3).value or '전북특별자치도 완주군'
ins=len(KIDS)-1
def nr(x): return x+(ins if x>P else 0)
MAXC=max(src.max_column,27); MAXR=src.max_row
dst=wb.create_sheet('__x__')
for col,dim in src.column_dimensions.items():
if dim.width: dst.column_dimensions[col].width=dim.width
def cpc(s,dd):
dd.value=s.value
if s.has_style: dd._style=copy.copy(s._style)
dd.number_format=s.number_format
def setkid(rw,lab,url,t):
dst.cell(rw,3).value=C; dst.cell(rw,CCOL).value=lab; dst.cell(rw,11).value=url
if t=='p': dst.cell(rw,12).value='페이지'; dst.cell(rw,13).value=1; dst.cell(rw,14).value='어문'; dst.cell(rw,15).value='미부착'
else: dst.cell(rw,12).value='사이트'
outr=0
for r in range(1,MAXR+1):
outr+=1
for c in range(1,MAXC+1): cpc(src.cell(r,c),dst.cell(outr,c))
dst.row_dimensions[outr].height=src.row_dimensions[r].height or 15
if r==P:
# 첫자식을 부모행 F에
lab,url,t=KIDS[0]; setkid(outr,lab,url,t)
for (lab,url,t) in KIDS[1:]:
outr+=1
for c in range(1,MAXC+1): cpc(src.cell(r,c),dst.cell(outr,c)); dst.cell(outr,c).value=None
dst.row_dimensions[outr].height=15; dst.cell(outr,2).value=None
setkid(outr,lab,url,t)
# merges remap + 새 E병합
for m in src.merged_cells.ranges:
a,b,c1,c2=m.min_row,m.max_row,m.min_col,m.max_col
na=nr(a) if a>=3 else a
nb=(nr(b)+ins) if b==P else (nr(b) if b>=3 else b)
dst.merge_cells(start_row=na,start_column=c1,end_row=nb,end_column=c2)
# E(실국과/사업소) 병합 신설
dst.merge_cells(start_row=nr(P),start_column=5,end_row=nr(P)+ins,end_column=5)
for r in range(3,dst.max_row+1):
v=dst.cell(r,11).value
if isinstance(v,str) and v.startswith('http'): dst.cell(r,11).hyperlink=v
dst.freeze_panes=src.freeze_panes
t=src.title; wb.remove(src); dst.title=t; wb.active=wb.index(dst)
wb.save(F)
print('실국과/사업소 전개: 710=r%d, %d%d (+%d), 페이지%d·사이트%d'%(P,MAXR,dst.max_row,dst.max_row-MAXR,sum(1 for k in KIDS if k[2]=='p'),sum(1 for k in KIDS if k[2]=='s')))