# 공공저작물 실태조사 DB수집

신유형개방지원사업 대상기관(1,160개)의 홈페이지를 사이트맵 단위로 점검하여
공공누리 부착 여부·게시물 형태·저작물 유형을 엑셀로 정리하는 데이터 수집 프로젝트.

루트 디렉터리: `D:\01.프로젝트\DB수집`

---

## 1. 프로젝트 구성

```
DB수집/
├─ ★[아이티앤] 공공저작물 자료조사 매뉴얼자료Ver1.2_260525.hwp   # 조사 매뉴얼(v1.2)
├─ ★공공저작물 실태조사 조사원 자료 취합본(관리자)_2605212137.xlsx # 관리자 취합본
├─ 붙임1_...개방 대상기관(1160개) 실태조사 목록...양식_260518.xlsx # 1,160개 기관 마스터 양식
├─ 자료_취합_예시.xlsx                                              # 작성 예시
├─ 2단계 안내사항.txt                                               # 2단계 분배·작성 규칙
├─ 하이퍼링크활성화.py                                              # K열 URL을 엑셀 하이퍼링크로 변환
│
├─ 1주차(5.19~5.25)/    # 지자체 2개 + 부처 3개 완료
│   ├─ 인천광역시(완료)/        # 분야별 메뉴 .txt + 작업본 xlsx + 크롤러
│   ├─ 전라남도(완료)/
│   ├─ 고용노동부(완료)/
│   ├─ 과학기술정보통신부(완료)/
│   ├─ 교육부(완료)/
│   └─ 수정/                    # 샘플 .xlsm + 심예진 수정본
│
└─ 2주차/               # 부처 3개 진행
    ├─ 보건복지부/              # test.py = mohw.go.kr 크롤러
    ├─ 성평등가족부/            # test.py = 저작물 8유형 자동 분류기
    └─ 외교부/                  # test.py = /list.do 게시판 건수 수집기
```

각 부처/지자체 폴더의 전형적 구성:
- `<기관명>_홈페이지_사이트_*.xlsx` — 단계별 작업본(r1, r2, ... 결과, 완료)
- `<기관명>_메뉴.txt` / `메뉴구조.txt` — 사이트맵 메뉴 텍스트 덤프
- `*.py` — 해당 기관 사이트 구조에 맞춘 크롤링 스크립트

---

## 2. 엑셀 데이터 스키마 (작업 컬럼)

크롤러 코드 기준 핵심 열:

| 열 | 번호 | 의미 | 채워지는 방법 |
|----|----|------|-------------|
| K  | 11 | URL 주소 | 수기 입력 (1차 사이트맵 수집) |
| L  | 12 | 게시판/페이지 구분 | 크롤러가 URL 패턴·DOM으로 자동 판별 |
| M  | 13 | 게시물 수량 | 게시판일 때 `total`·`totalCount` 등에서 추출 |
| N  | 14 | 저작물 유형 | 본문 분석 → 어문/이미지/영상/오디오/글꼴/3D/기타/없음 |
| O  | 15 | 공공누리 부착 유형 | `kogl.or.kr/info/licenseType` 링크에서 1~4유형 추출 |
| P  | 16 | 마크 부착위치 | 게시판/게시물 |
| Q  | 17 | 부착 여부 보조 | (스크립트별 상이) |

데이터는 보통 3행 또는 4행부터 시작(헤더 2행).

---

## 3. 작성 규칙 (2단계 안내사항 발췌)

- 대분류는 **지방자치단체 17개 우선**, 중분류는 **부/처/청 상단기관**만 (단, `_기타` 포함 제외).
- `게시물형태 == 사이트`: `수량`~`마크 하이퍼링크` 공백 처리.
- `저작물 유형` 및 `공공누리 연계`는 작성 X.
- `공공누리 부착` 유형이 여러 개이면 모두 기재(예: `1유형, 4유형`).
- 게시물 0건 또는 자물쇠 페이지 → `공공누리 부착 = 미부착`.
- 게시판·게시물 동시 부착 → `마크 부착위치 = 게시판`.
- 페이지에만 부착 → `마크 부착위치 = 게시물`.
- 로그인·본인인증 페이지는 전부 삭제.

분배 현황(2단계 17개 지자체):
김재민(경남/울산/충남) · 구소영(경북/서울) · 심예진(강원/대전/세종/제주) ·
방유정(경기/부산/전북) · 황의정(광주) · 정대원(대구/충북) ·
프리랜서1(인천/전남/고용노동부/과기정통부/교육부).

---

## 4. 스크립트 카탈로그

루트 공용:
- `하이퍼링크활성화.py` — K열의 http(s) URL을 엑셀 하이퍼링크로 변환 + 파란색 밑줄 스타일 적용. 입력/출력 경로는 스크립트 내부 상수.

기관별 크롤러(공통 패턴: `requests` + `BeautifulSoup` + `openpyxl`로 기존 서식을 보존하며 셀만 갱신):

| 위치 | 용도 |
|------|------|
| `2주차/외교부/test.py` | URL이 `/list.do`로 끝나면 L열에 "게시판" 표시, `<div class="total"><span>` 건수를 M열 기입 |
| `2주차/성평등가족부/test.py` | 게시판 목록에서 `fn_selectView(n)` 패턴으로 상세 URL 최대 5개 수집 → 본문(`table.brdView01` 또는 `div#contents`) 분석 → 저작물 8유형 판별 |
| `2주차/보건복지부/test.py` | `mohw.go.kr` 페이지 판별, `#totalCount` 또는 `span.total b`로 건수 수집, 상세글 `article.board_view` 본문 영역 분석 |
| `1주차/인천광역시(완료)/페이지_마크찾기.py` | `<main class="content">` 내 `kogl.or.kr/info/licenseType{n}` 링크에서 공공누리 유형 추출 → O열 기입 |
| `1주차/인천광역시(완료)/저작물유형구분.py` | 저작물 유형 자동 분류 |
| `1주차/전라남도(완료)/전라남도_페이지_마크찾기_게시판.py` | 전남 게시판형 마크 탐지 |
| `1주차/전라남도(완료)/페이지_마크찾기_페이지.py` | 전남 페이지형 마크 탐지 |
| `1주차/고용노동부(완료)/페이지_마크찾기_allinone.py` | 고용부 전 영역 통합 마크 탐지 |

공통 동작 원칙:
- `User-Agent`를 Chrome으로 위장, 0.5~1초 슬리프로 차단 회피.
- `openpyxl.load_workbook` → 셀만 수정 → 새 파일명(`_r2`, `_결과`, `_완료` 등)으로 저장.
- 본문 영역 셀렉터는 사이트별로 다름(상세 코드 주석 참조).

---

## 5. 산출물 네이밍 컨벤션

같은 데이터를 단계적으로 가공하면서 접미사로 버전 표시:

`{기관명}_홈페이지_사이트_{r1|r2|r3|결과|완료}.xlsx`

예) `외교부.xlsx → 외교부_업데이트.xlsx → ..._활성화_r4.xlsx → ..._활성화_r5.xlsx → 외교부_완료.xlsx`

`_완료` 또는 `_완료_ai` 접미사가 붙은 파일이 최종본.

---

## 6. 실행 환경

- Python 3 + `openpyxl`, `requests`, `beautifulsoup4`, `urllib3`.
- Windows 경로(`D:\01.프로젝트\DB수집`)와 `ownCloud\알바\...` 경로가 스크립트에 혼재 — 실행 전 입출력 경로 확인 필요.
- 일부 사이트(성평등가족부 등) SSL 검증 우회(`verify=False`) 사용.
