본문 바로가기
AI_RSS_트래픽 프로젝트

모르는 상태로 하는 RSS&분석&RAG 프로젝트(10) 데이터 수집(4)

by chol_rang 2025. 12. 8.

드디어 오늘은 뉴스의 RSS 피드를 수집하는걸 해봤다.

 

먼저 가상환경을 켜주고 

 

python manage.py runserver로 서버를 열어준다음 

celery -A trend_analyzer worker --pool=solp --loglevel=info 로 celery도 활성화 시켜준 뒤

기존에 연결해둔 swaager로 들어가서

 

기존에 RSS url을 읽어서 DB에 NewsSource는 저장해 뒀으니 그 내용을 하나하나 읽어서 DB에 저장하고 Redis도 한번 거쳐서 Redis에는 내용보단 해당 기사가 있는지 체크 후 없으면 해당기사의id만 저장하는 식으로 저장했다. 

 

약 1시간 30분정도 뒤에 수집이 완료되었는데 

celery를 활성화 해서 그런가 python 이 멈추거나 그러지 않았고 추가로 다른작업을 계속 할 수 있다는게 너무 좋았다. 

 

1시간 30분정도 642개의 RSS url을 읽고 가져온 결과물인데 조금 살펴보니 

1/3정도가 현재는 RSS피드를 운영하고있지 않거나 기사가 없는 내용도 많이 보였다. 

이대로는 수집하는데 효율적이지 못하다는 생각에 수집하는데 실패한 RSS들을 정리하여 한번에 삭제처리 할 수 있도록 

command를 

class Command(BaseCommand):
    help = 'Remove NewsSource with failed RSS feeds'

로 만들고 안에 내용은 수집할때 response의 status가 failed가 있으면 직접 테스트를 진행하고 

파싱문제인지, 피드는 문제없는데 기사가 없는 경우에도 모두 모아 삭제 혹은 비활성화(is_active = False)

처리 할 수 있도록 만들었다.  

 

그리고 한번 돌려본 결과 언제 시작해서 언제 끝나며 몇개의 소스를 살펴봤고 기사는 몇개 가져왔는지 체크를 터미널에서만 할수있게 해놔서 많이 불편함을 느꼇다.

 

그래서 

data_collector/report_service.py를 새로 만들어 json, markdown으로 저장 할 수 있게 만들어

{
  "id": 1,
  "started_at": "2025-12-08T06:13:48.768558+00:00",
  "completed_at": "2025-12-08T06:50:59.423870+00:00",
  "status": "completed",
  "total_sources": 642,
  "successful_sources": 642,
  "failed_sources": 0,
  "total_articles_collected": 289,
  "total_articles_skipped": 8319,
  "total_articles_error": 0,
  "duration_seconds": 2230.655312,
  "json_report_path": null,
  "markdown_report_path": null,
  "jobs": [
    {
      "source": "헤럴드경제 - 현장노트",
      "status": "completed",
      "started_at": "2025-12-08T06:50:57.315606+00:00",
      "completed_at": "2025-12-08T06:50:59.355146+00:00",
      "items_collected": 0,
      "error_message": null
    },
    {
      "source": "헤럴드경제 - 헬스",
      "status": "completed",
      "started_at": "2025-12-08T06:50:55.199634+00:00",
      "completed_at": "2025-12-08T06:50:57.249084+00:00",
      "items_collected": 0,
      "error_message": null
    },
    {
      "source": "헤럴드경제 - 헤럴드 스쿨",
      "status": "completed",
      "started_at": "2025-12-08T06:50:53.111192+00:00",
      "completed_at": "2025-12-08T06:50:55.134597+00:00",
      "items_collected": 0,
      "error_message": null
    },

 

# 수집 세션 리포트 #1

## 기본 정보

- **세션 ID**: 1
- **시작 시간**: 2025-12-08 06:13:48
- **종료 시간**: 2025-12-08 06:50:59
- **상태**: 완료
- **소요 시간**: 2230.7초 (37.2분)

## 소스 통계

- **전체 소스 수**: 642개
- **성공한 소스**: 642개
- **실패한 소스**: 0개
- **성공률**: 100.0%

## 기사 통계

- **수집된 기사**: 289개
- **건너뛴 기사**: 8319개
- **오류 발생 기사**: 0개
- **처리된 기사 총합**: 8608개

## 작업 상세

| 소스 | 상태 | 수집 개수 | 시작 시간 | 완료 시간 |
|------|------|----------|----------|----------|
| 헤럴드경제 - 현장노트 | 완료 | 0 | 2025-12-08 06:50:57 | 2025-12-08 06:50:59 |
| 헤럴드경제 - 헬스 | 완료 | 0 | 2025-12-08 06:50:55 | 2025-12-08 06:50:57 |
| 헤럴드경제 - 헤럴드 스쿨 | 완료 | 0 | 2025-12-08 06:50:53 | 2025-12-08 06:50:55 |
| 헤럴드경제 - 코스닥칼럼 | 완료 | 0 | 2025-12-08 06:50:51 | 2025-12-08 06:50:53 |
| 헤럴드경제 - 코스닥일반 | 완료 | 0 | 2025-12-08 06:50:48 | 2025-12-08 06:50:50 |
| 헤럴드경제 - 컬쳐 | 완료 | 0 | 2025-12-08 06:50:46 | 2025-12-08 06:50:48 |
| 헤럴드경제 - 칼럼 | 완료 | 0 | 2025-12-08 06:50:44 | 2025-12-08 06:50:46 |
| 헤럴드경제 - 추천종목 | 완료 | 0 | 2025-12-08 06:50:42 | 2025-12-08 06:50:44 |

 

이렇게 언제든지 확인 할 수 있도록 만들었다. 

이것이 나중에 자동화의 기초가 될 수 있도록 잘 살펴보고 만들긴했는데 아직 전부다 이해는 하지 못했다. 

 

일단은 내일 한번 더 시도해서 RSS피드 실패하거나 기사를 가져오지 못하는 곳들은 시간과 자원을 많이 잡아먹지 않도록 비활성화

예정이며, 내일부터는 SNS RSS,API 등을 시도 해볼 생각이다.