간단하고 빠른, 멀티프로세스 지원 뉴스 크롤러입니다.
MongoDB를 설치하고, main.py를 실행시키고, 후술될 oid
를 입력하세요.
정상적으로 작동된다면 데이터베이스의 newsDB와 newsCategory에 크롤링된 내용이 저장됩니다.
네이버 뉴스의 URL은 다음과 같이 구성됩니다.
https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=001&aid=0011015423
여기서 중요한 것은 aid
와 oid
입니다.
oid
는 언론사의 일련번호이고, aid
는 각 언론사별로 발행한 뉴스의 일련번호입니다.
이 프로그램은 언론사를 입력하면 해당 언론사의 모든 뉴스를 크롤링합니다.
각 언론사별 코드는 다음과 같습니다:
oid | 언론사명 |
---|---|
001 | 연합뉴스 |
002 | 프레시안 |
003 | 뉴시스 |
004 | 한국경제TV |
005 | 국민일보 |
006 | 미디어오늘 |
007 | 일다 |
008 | MT |
009 | 메일경제 |
011 | 서울경제 |
013 | 연합인포맥스 |
014 | 파이낸셜뉴스 |
015 | 한국경제 |
016 | 헤럴드경제 |
018 | 이데일리 |
019 | MBN |
020 | 동아일보 |
021 | 문화일보 |
022 | 세계일보 |
023 | 조선일보 |
024 | 매경이코노미 |
025 | 중앙일보 |
028 | 한겨레 |
029 | 디지털타임스 |
030 | 전자신문 |
031 | 아이뉴스24 |
032 | 경향신문 |
033 | 주간경향 |
036 | 한겨레21 |
037 | 주간동아 |
044 | The Korea Herald (영어) |
046 | |
047 | 오마이뉴스 |
049 | mbc sports(스포츠) |
050 | 한경 비즈니스 |
052 | YTN |
055 | SBS |
056 | KBS |
057 | MBN |
065 | JUMPBALL(스포츠) |
076 | 스포츠조선 |
077 | |
078 | |
079 | 노컷뉴스 |
081 | 서울신문 |
082 | 부산일보사 |
084 | 제주일보사 |
086 | 석간 내일신문 |
087 | |
088 | 매일신문 |
089 | |
091 | 연합뉴스 |
092 | ZDNet |
096 | SBS |
098 | |
108 | 스타뉴스(연예) |
109 | OSEN(연예) |
111 | 조이뉴스(스포츠) |
112 | 헤럴드 POP |
117 | 마이데일리(연예) |
119 | 데일리안 |
140 | 씨네21 |
143 | 쿠키뉴스(스포츠) |
144 | 스포츠경향(스포츠) |
227 | 아시아경제 |
293 | 블로터 |
366 | 조선비즈 |
421 | 뉴스1 |
437 | JTBC |
448 | TV조선 |
586 | 시사저널 |
DB는 newsDB와 newsCategory에 저장됩니다.
newsDB에는 뉴스의 내용이 저장됩니다. 각 언론사별로 컬렉션을 만들어 그 컬렉션에 저장합니다. 저장되는 데이터의 형식은 다음과 같습니다.
- newsId : 뉴스 aid
- title : 뉴스 제목
- body : 뉴스 본문
- summary : 뉴스 요약본(네이버 3줄요약 인공지능 기반)
- category : 뉴스 카데고리(배열로 저장됨, 중복 분류 대응)
- publishTime : 뉴스 최초 발행 시각
- editedTime : 뉴스 최종 수정 시각
newsCategory에서는 카데고리별로 뉴스를 찾을 수 있도록 뉴스의 oid와 aid를 저장합니다. 각 분류별로 컬렉션을 만들어 그 컬렉션에 저장합니다. 네이버 뉴스 방침상 기사의 중복분류를 허용하고 있어 같은 기사가 여러 개의 컬렉션에 중복으로 등록될 수도 있습니다. 저장되는 데이터의 형식은 다음과 같습니다.
- oid : 뉴스 oid
- aid : 뉴스 aid
각 분류는 다음과 같은 코드로 저장됩니다.
- 정치: politics
- 경제: economy
- 사회: society
- 생활/문화: live
- 세계: world
- IT/과학: it
- 오피니언: opinion
processNo와 batch를 조정함으로써 다운로드 속도를 조정할 수 있습니다. processNo는 몇개의 프로세스로 뉴스를 동시에 다운받을지 설정하는 변수입니다. batch는 데이터베이스에 저장하는 주기입니다. 해당 값이 작으면 저장을 더 자주 하지만, 속도가 느려집니다.
해당 프로그램은 크롤링을 위해 어떠한 우회도 하지 않습니다(refer, user-agent, ...) 해당 프로그램을 사용하여 발생하는 모든 문제들(IP 차단, ...)에 대한 책임은 사용자 본인에게 있습니다.