- 공공기관2/3 작업본 + 오늘 제출 17곳 D~J 카테고리 셀병합 정상화 - 한국지역난방공사 옵션2(고아셀 F98 수정)+전행 높이17 - 제출_프리랜서2_2026-06-21.zip 생성(17개 xlsx, 2,468행) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.0 KiB
5.0 KiB
공공기관3 기관별 수집 완성 SOP (서브에이전트용)
너는 공공저작물 실태조사 프로젝트의 한 기관(공공기관3) 사이트맵 수집을 완성한다.
출력 = D:\01.프로젝트\DB수집\작업파일\공공기관3\{번호}.{기관}\{기관}.xlsx (양식: 1~2행 헤더, 3행~ 데이터, 시트명 NN_기관).
최종 메시지는 사람이 아니라 호출자에게 가는 데이터다. 행수·forms 분포·플래그만 간결히 보고.
양식 컬럼 (B~AA, 데이터는 3행부터)
- B 순번(1~N) · C 사이트명(=기관명 고정) · D~J 메뉴 권위트리(대>중>소>세부, 깊이순·세로병합) · K 주소(절대URL·하이퍼링크)
- L 게시판형태: 게시판/페이지/사이트 · M 수량(게시판=총글수 숫자, 페이지=1, 사이트=빈칸) · N 저작물유형 · O/P/Q 공공누리
- 사이트(외부/새창)=M/N/O/P/Q 전부 빈칸. 페이지 M=1. 게시판 M=글수.
도구 (이미 만들어져 있음, 공공기관3 폴더에서 실행. 한글 인자는 기관명)
cd "D:\01.프로젝트\DB수집\작업파일\공공기관3"
python _gnb_extract.py {num} # GNB 메가메뉴 추출 → _gnb/{num}.json (SITES에 컨테이너/토글 설정)
python _writetree.py {num} # _gnb json → xlsx 트리(D~K, 병합·중복제거·외부=외부링크표시)
python _phase234.py {기관명} # L/M/N/O 자동(게시판form·글수·미디어N·KOGL). 멀티스레드
python _nshot.py {기관명} # 몽타주: _temp\nshot_{기관}\montage_*.png + plan_{기관}.json (candidate행)
python _napply.py {기관명} # plan의 N판정을 시트에 적용
엔진 본체: D:\01.프로젝트\DB수집\_스크립트\_공공기관2_{phase1,phase234,nshot,napply}.py (OUTDIR만 override됨).
작업 순서
- 현재 상태 확인: 네 기관 xlsx가 이미 있으면(대부분 Phase1-4 됨) 트리·L/M/N/O 확인. 없으면
_gnb_extract→_writetree→_phase234. - 구조 검증(중요·매뉴얼 핵심): 라이브 사이트의 GNB/전체메뉴를 직접 열어(Playwright
browser또는 python+playwright) D~J 권위트리가 실제 메뉴와 일치·누락0 확인. 메가메뉴가 2단(D/E)만 잡혔는데 실제 3~4단이면 하위 펼쳐 깊이 보강. 누락 페이지/게시판 추가. (사이트맵보다 본 페이지 메뉴가 권위) - 본문탭 전수 전개(kdhc_tebli_tab_expand 규칙): 대표 페이지 본문에 콘텐츠탭 위젯(
li.tebLi·ul.tab*·scrollable-tabs·sub-page__tab등, active는<a>나<li>)이 있으면 전 페이지·게시판 URL을 fetch해 전수 스캔→탭셋으로 그룹 dedup→self(active)≠leaf=자식(다음 깊이)·==leaf=형제(같은 깊이). 신규탭 L/M/N/O 라이브판정. "전체"탭 없는 분류탭(같은 menuNo·param만 상이)=각 별행 게시판 split. AJAX목록(정적 tbody無)=M브라우저확인 플래그. 풀리빌드 시 병합=D~J 동일값런 재생성·K링크 재적용·B재부번. - L/M/N/O 정밀화:
- L: 전체건수/페이징/검색 중 하나라도 = 게시판(글0이어도 게시판형태면 게시판). 외부/새창 = 사이트. 그 외 페이지.
- M: 게시판=총글수(번호열 최댓값 or "총 N건"/"전체게시물 N"). 페이지=1.
- N(몽타주 관찰 필수):
_nshot실행→_temp\nshot_{기관}\montage_*.png를 Read로 직접 보고 시각판정. 8종만(어문/이미지/영상/오디오/글꼴/3D/기타/없음). 페이지=사진만 이미지(조직도·인포그래픽·차트·표·글자이미지·로고=어문). 게시판=상세에 진짜사진/갤러리썸네일 있으면 어문,이미지 / 순수텍스트목록=어문 / 빈게시판(M0)=없음. Q&A·문의·설문 사용자생성형=어문. 판정 후_napply또는 직접 N열 기입. 변경 셀 파란색FFBDD7EE. - O/P/Q: 공공누리 이미지마크(
img_opentype0N·ccl_img open0N등 통합정규식open(?:type|code)0*(\d))만 권위. 게시판 O=상위~10글 유형 합집합. 본문 "제N유형" 텍스트 정규식 금지. 마크없으면 미부착. P=페이지면 게시물·게시판목록=게시판·상세=게시물. Q=마크가 kogl.or.kr 링크면 Y.
- 검증: B순번 1~N 연속·C 기관명·병합겹침0·부모경계위반0·K링크불일치0·페이지M=1·사이트 MNOPQ빈칸. 백업
_backup_*.xlsx. - 보고: 최종 행수, L분포(페이지/게시판/사이트), KOGL부착수, 본문탭 추가행수, 플래그(미해결·브라우저확인필요).
규칙 메모
- 깊이 추적은 재귀(J에 잔여 합침). 부모-자식 URL중복(부모 D~lc동일+lc+1채워짐+K동일)=부모행삭제(F→E→D순).
- 랜딩셸(Cn 여러행병합+첫행 Cn+1빈칸+섹션랜딩URL)=첫행만 삭제·라벨 첫자식승계.
- openpyxl insert_rows는 K하이퍼링크 어긋남 버그→풀리빌드 권장. 워크북간
cell._style복사금지→copy.copy(_style)동일wb. - fetch는
resp.content(바이트)로 BeautifulSoup(meta charset 자동).