DB_JOB/작업파일/공공기관3/_SOP_수집.md
hehihoho3 b0acd1e705 백업: 셀병합 정상화(D~J)+KDHC 옵션2/행높이17, 오늘(06-21) 제출 17곳 검수·압축
- 공공기관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>
2026-06-21 13:21:26 +09:00

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됨).

작업 순서

  1. 현재 상태 확인: 네 기관 xlsx가 이미 있으면(대부분 Phase1-4 됨) 트리·L/M/N/O 확인. 없으면 _gnb_extract_writetree_phase234.
  2. 구조 검증(중요·매뉴얼 핵심): 라이브 사이트의 GNB/전체메뉴를 직접 열어(Playwright browser 또는 python+playwright) D~J 권위트리가 실제 메뉴와 일치·누락0 확인. 메가메뉴가 2단(D/E)만 잡혔는데 실제 3~4단이면 하위 펼쳐 깊이 보강. 누락 페이지/게시판 추가. (사이트맵보다 본 페이지 메뉴가 권위)
  3. 본문탭 전수 전개(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재부번.
  4. L/M/N/O 정밀화:
    • L: 전체건수/페이징/검색 중 하나라도 = 게시판(글0이어도 게시판형태면 게시판). 외부/새창 = 사이트. 그 외 페이지.
    • M: 게시판=총글수(번호열 최댓값 or "총 N건"/"전체게시물 N"). 페이지=1.
    • N(몽타주 관찰 필수): _nshot 실행→_temp\nshot_{기관}\montage_*.pngRead로 직접 보고 시각판정. 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.
  5. 검증: B순번 1~N 연속·C 기관명·병합겹침0·부모경계위반0·K링크불일치0·페이지M=1·사이트 MNOPQ빈칸. 백업 _backup_*.xlsx.
  6. 보고: 최종 행수, 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 자동).