네이버 블로그 백업 크롤링 코드

https://github.com/rage147-OwO/naver-blog-archiver
[GitHub - rage147-OwO/naver-blog-archiver: Back up your naver blog posts to the local directory
Back up your naver blog posts to the local directory - rage147-OwO/naver-blog-archiver
github.com](https://github.com/rage147-OwO/naver-blog-archiver)
네이버 블로그를 SQLite DB + 로컬 이미지로 증분 백업하고, 다크 테마 웹 UI로 열람·검색하는 도구.
원본: https://github.com/guzus/naver-blog-archiver 를 포크해 개선한 것을 전면 재작성.
주요 기능
| 기능 | 설명 |
| 증분 동기화 | 새 글/변경된 글만 수집. 매번 전체 재다운로드하던 레거시 문제 해결 |
| 수정 감지 + 이력 | 제목·미리보기 변화로 수정 감지, 이전 버전 스냅샷을 posts_history에 보존 |
| 삭제 글 보존 | 블로그에서 삭제/비공개된 글도 아카이브에는 남고 missing 배지로 표시 |
| 이미지 원본 화질 | blogfiles 호스트/type=w3840으로 원본 다운로드. 실제 확장자(jpg/png/gif/webp) 저장 |
| 풍부한 메타데이터 | 정확한 발행시각, 카테고리, 공감·댓글 수, 에디터 버전, 썸네일 |
| 웹 UI | 대시보드·검색·카테고리 필터·오프라인 본문 뷰어(로컬 이미지)·동기화 진행 표시 |
| 네이버 재발행 | 글 페이지의 “재발행용 복사” → 글쓰기 창에 Ctrl+V로 서식·이미지 복원 (글쓰기 API는 2020년 종료라 클립보드 방식) |
| 내보내기 | Jekyll(레거시 SavedPost 포맷 호환) / 순수 Markdown / JSON 덤프 |
| 카테고리 slug | googletrans 제거 → 내장 한글 로마자 변환 + 웹 UI에서 직접 수정 가능 |
설치
pip install -r requirements.txt
사용법
동기화 (기본: 증분 — 새 글/변경 글만) python _code/blog_archiver.py sync python _code/blog_archiver.py sync –full # 전체 재수집 (수정 이력 보존) python _code/blog_archiver.py sync –limit 5 # 테스트용 개수 제한 # 웹 UI (브라우저 자동 오픈, 기본 포트 8765) python _code/blog_archiver.py web # 내보내기 python _code/blog_archiver.py export –format jekyll # GitHub Pages용 python _code/blog_archiver.py export –format markdown # 로컬 보관/옵시디언용 python _code/blog_archiver.py export –format json # DB 전체 덤프 # 기타 python _code/blog_archiver.py stats # 아카이브 통계 python _code/blog_archiver.py search “검색어” # 제목·본문 검색 python _code/blog_archiver.py rebuild # 저장된 HTML로 markdown 재생성 (재다운로드 없음)
첫 실행 시 config.json이 생성된다. 블로그 ID·요청 간격·제외 카테고리 등은 config.json 또는 웹 UI의 설정 페이지에서 변경.
저장 구조
archive/<blog_id>/ ├─ archive.db # SQLite: 글 본문(HTML+Markdown)·이미지 메타·카테고리·수정이력·동기화 로그 ├─ images/
- 백업은 전부 저장된다. excluded_categories 설정은 Jekyll 내보내기에만 적용.
- 이미지 파일명은 원본 URL 해시 기반 → 글이 수정돼도 기존 이미지는 재다운로드하지 않음.
레거시 (v1)
기존 스크립트(main.py, article.py 등)는 legacy/ 폴더로 이동. v1의 문제: 매 실행 전체 재다운로드, 이미지 리사이즈본(?type=w773)을 .png 확장자로 일괄 저장, googletrans 의존(빈번한 장애), 글 하나 실패 시 전체 중단, blog_id 하드코딩.
주의
- 요청 간격 기본 0.5초. 네이버 서버에 부담을 주지 않도록 과하게 줄이지 말 것.
- 본인 블로그 백업 용도로 만들어졌다. 타인 블로그의 대량 수집은 이용약관을 확인할 것.
- 동영상·첨부파일·스티커는 다운로드하지 않고 DB의 media 테이블에 존재만 기록된다.