드디어 오늘은 뉴스의 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 등을 시도 해볼 생각이다.