인턴일기 – 25일차 (뉴스 수집 시스템 디버깅 & 수집 프로세스 정리)

2025. 6. 23. 12:17데이터분석 인턴일기

오늘의 업무

뉴스 메타 정보 수집 함수 디버깅

전체 액션 프로세스 점검 및 예외처리 로직개선

 

오늘은 기존 뉴스 수집 코드에서 발생하던 여러 문제들을 디버깅하고, 전체 뉴스 수집 프로세스를 구조적으로 정리했다. 

작은 코드 수정 하나에도 많은 환경과 예외처리가 필요하다는 것을 체감했다.

 

🛠 1. 뉴스 메타 정보 수집 함수 디버깅

뉴스 본문에서 메타 정보를 추출하는 과정에서 여러 이슈가 발생했다.

특히 두 가지 주요 문제가 있었고, 이에 대한 대응 로직을 코드에 반영했다.

❗ 문제 1: aiohttp가 P3P 헤더 오류로 중단되는 이슈

aiohttp 라이브러리를 통해 요청을 보낼 경우, 일부 응답에 포함된 P3P 헤더의 잘못된 띄어쓰기 때문에 요청이 실패했다. 이를 해결하기 위해 실패 시 requests로 자동 재시도하도록 로직을 수정했다. (뉴스사이트가 문제다)

오류 이미지 캡처

❗ 문제 2: gzip 중첩 압축 문제

일부 뉴스 링크는 gzip으로 한 번 압축된 데이터 내부에 다시 한 번 gzip이 적용되어 있어 파싱이 불가능했다. 이를 해결하기 위해 수동으로 gzip을 해제하는 조건식을 추가하여 대응했다.

🧼 개선점: BeautifulSoup 대신 정규식 기반 파싱

메타 태그 파싱에는 기존에 BeautifulSoup을 사용했지만, 효율성이 떨어지는 문제를 느꼈다. 인터넷 기사 구조는 대부분 메타 태그 위치가 고정되어 있으므로, 정규식을 통해 og:title, og:image, og:site_name을 직접 추출하도록 로직을 변경했다.
HTML 구조가 살짝 어긋날 경우 문제는 있을 수 있지만, 현재로선 실효성이 높다고 판단했다. (헤더에 오타나서 수집이 안되는 페이지도 수집이 되므로 ^^;;)


🔄 2. 뉴스 수집 전체 프로세스 점검

전체 수집 로직을 다시 점검하고 흐름을 명확히 정리했다. 수집 효율과 중복 제거 정확도를 높이기 위해 수집 조건과 필터링 절차를 재정의했다.

📌 수집 로직 순서 정리

  1. 키워드를 기준으로 최대 10페이지 / 200개 기사 수집
    → 수집 결과가 10개 미만이면 재수집
  2. 기존 DB에 있는 post_url과 비교하여 중복 제거
    본문 내용 기준 비교는 생략 (매일 처리하지 않기 때문에 문제 없음)
  3. 신규 기사들에 대해 자카드 유사도 기반 중복 제거
    → 기존 기사와의 비교는 생략
  4. 남은 기사에서 Source, Image 등의 메타 데이터 수집 및 정리
  5. 최종적으로 DB에 입력

 

오늘은 디버깅을 통해 Fiddler를 활용한 방법을 사용해 보았다. 직접 보낸 요청과 빋은 응답을 비교하면서 문제가 어디에서 발생했는지를 눈으로 확인 할 수 있었던 좋은 경험이었다.

처음에는 코드구조도 복잡하고, 여러 라이브러리가 섞여있어서 감을 잡기 어려웠지만, 시간을 들여 하나씩 따라가다보니 이해도도 올라가고 문제해결 속도도 붙기 시작했다.