From a6c85e507bc3aba48245e74ec7d552cd7146e251 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 21 Oct 2025 20:40:17 +0900 Subject: [PATCH] docs: record Platum crawler recovery and Neo4j news update --- ...latum_crawler_recovery_and_neo4j_update.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 troubleshooting/251021_platum_crawler_recovery_and_neo4j_update.md diff --git a/troubleshooting/251021_platum_crawler_recovery_and_neo4j_update.md b/troubleshooting/251021_platum_crawler_recovery_and_neo4j_update.md new file mode 100644 index 0000000..ec07cc2 --- /dev/null +++ b/troubleshooting/251021_platum_crawler_recovery_and_neo4j_update.md @@ -0,0 +1,48 @@ +# 2025-10-21 Platum/TheVC 크롤러 복구 및 Neo4j 뉴스 데이터 갱신 + +**작성일**: 2025-10-21 +**작성자**: Codex (51123 서버 관리자) +**상태**: 완료 + +--- + +## 배경 +- Platum/TheVC 크롤러가 robots.txt 차단으로 판단되어 삭제된 상태라 최신 뉴스가 누락되고 있었음. +- 기존 `crawler_utils.py`가 BOM이 포함된 robots.txt를 `can_crawl=False`로 잘못 해석하고, 브라우저 전용 압축(`br`)을 사용해 본문 파싱에 실패하는 문제가 확인됨. +- 최신 Platum 데이터 15페이지 분량을 확보한 뒤 Neo4j 뉴스 그래프를 갱신해야 함. + +## 조치 요약 +1. **크롤러 및 유틸리티 복구** + - `startup_crawl/crawl_platum.py`, `startup_crawl/crawl_thevc.py`를 재작성하여 robots 허용 여부를 재검증하고, 요청 간 랜덤 대기(3~6초)로 서버 부하를 낮춤. + - `startup_crawl/crawler_utils.py`에서 + - BOM 제거 후 `RobotFileParser.parse()`로 직접 로딩, + - `Accept-Encoding: gzip, deflate`로 조정하여 브로틀리 응답 문제 해결, + - 로그 경로를 `/mnt/hdd/data/DATA/startup_crawl/logs/` 등 접근 가능한 위치로 자동 선택. + - `startup_crawl/run_all_crawlers.sh`를 순차 실행 방식으로 변경 (각 크롤러 별 로그). + +2. **Platum 최신 데이터 수집** + - 실행: `cd /mnt/hdd/data/DATA/startup_crawl && python3 crawl_platum.py 15` + - 생성 파일: `startup_crawl/platum/articles_page_1_to_15.json` (총 180건, 2025-10-21 기사 포함). + +3. **Neo4j 로더 개선 및 실행** + - `load_all_to_neo4j.py`에 `--reset`, `--news-only` 옵션과 `extract_articles()` 헬퍼 추가. + - 뉴스 JSON 구조가 dict/list 혼재된 경우에도 URL 기준 dedupe 수행. + - 실행: `python3 load_all_to_neo4j.py --news-only` + - 기존 그래프 유지, 뉴스만 MERGE로 갱신. + - 결과 통계: `NewsArticle` 7,494개, `MENTIONS` 1,574개. + +## 결과 및 영향 +- Platum/TheVC 크롤러가 복구되어 향후 `run_all_crawlers.sh` 실행 시 해당 소스가 정상 반영됨. +- Neo4j 뉴스 노드가 최신 Platum 기사까지 포함하도록 갱신됨. +- `load_all_to_neo4j.py`를 배치에서 호출할 경우 입력 대기 없이 옵션으로 제어 가능해짐. + +## 주의 사항 +- TheVC는 여전히 `Disallow: /` 정책이므로 실제 크롤링은 robots 허용 시점에만 진행해야 함(스크립트는 `can_crawl` 검사 후 자동 중단). +- 크롤러 실행 전 `/mnt/hdd/data/DATA/startup_crawl/platum/checkpoint.json`을 확인하여 필요한 범위(페이지 수)를 조절할 것. +- Neo4j 로딩 시 전체 리셋이 필요하면 `--reset` 옵션을 명시적으로 사용해야 함. + +## 다음 단계 +1. `run_all_crawlers.sh`에 Platum 페이지 수(예: 15) 조정 및 주기적 실행 스케줄 검토. +2. TheVC robots 정책 변경 여부를 주기적으로 점검하고 허용 시 `crawl_thevc.py` 실행 결과 검증. +3. 뉴스-스타트업 매칭 정확도를 높이기 위한 제목/본문 키워드 기반 보완 로직 검토. +4. 필요 시 Neo4j 로더에 증분 로딩 옵션(날짜 필터)을 추가하여 실행 시간을 단축.