[LLM 기반 증시 상황 요약 Bot] (2) 전자 신문 Crawling
2024. 5. 2. 22:51ㆍ프로젝트
1) 필요한 라이브러리를 설치하고 불러온다
!pip install feedparser
!pip install newspaper3k
!pip install konlpy
import feedparser # rss 에서 xml 정보 추출
from newspaper import Article # 인터넷 신문 기사 분석
from konlpy.tag import Okt # 한국어 자연어 처리/형태소 분석기
설치를 했음에도 'no module found error'가 발생한다면, path를 추가해줘야 한다.
라이브러리 설치 저장 경로를 확인하여 path로 추가해준다.
import sys
sys.path.append('c:\\users\\dmlql\\appdata\\roaming\\python\\python311\\site-packages')
print(sys.path)
2) RSS파일에서 기사 제목/link 추출
전자신문의 RSS 파일 link이다.
들어가보면 위와 같은 XML 파일이 나오는데 여기서 필요한 정보인 title과 link만 따로 저장한다.
urls = ["http://rss.etnews.com/Section901.xml",
"http://rss.etnews.com/Section902.xml",
"http://rss.etnews.com/Section903.xml",
"http://rss.etnews.com/Section904.xml"]
# 아래 함수는 RSS목록의 list안에 존재한느 모든 기사의 title, link를 list로 구성
def crawl_rss(urls):
array_rss = [] # 여기메 모든 기사 채울 것
title_set = set() # 중복 기사 제거하기 위함
for url in urls:
print("[Crawl URL]", url)
parse_rss = feedparser.parse(url) # 현재 url을 파싱한 후에 결과를 저장
for p in parse_rss.entries: # parse_rss에 있는 모든 entries/기사를 검색
if p.title in title_set :
print("Duplicated Article", p.title)
continue
array_rss.append({'title':p.title, 'link':p.link})
title_set.add(p.title)
return array_rss
list_articles = crawl_rss(urls)
print(list_articles)
각각 오늘의 뉴스, 뉴스 속보, 오늘의 인기기사, 오늘의 추천기사의 RSS 파일에서 기사를 추출하는데 중복성이 있을 수 있으므로 제거하는 코드를 넣어놨다.
3. Article Link를 통해 본문 긁어오기
앞에서 RSS 파일을 통해 각 기다들의 Link 정보를 저장했다. 이 Link를 통해 기사 내용을 긁어올 수 있다. 기존의 기사를 저장한 list에 dict 형태로 저장한다.
def crawl_article(url, language='ko'):
print("[Crawl Article]", url) # 현재 title과 text를 추출할 url을 프린트 해줌
a = Article(url, language = language) # Article을 사용하여 그 URL을 입력하고, 언어옵션지정(한글어기본), 결과를 a에 저장
a.download()
a.parse()
return a.title, a.text # a에 해당하는 title과 본문(text)을 출력한다.
# 몬문내용 저장
for article in list_articles:
_, content = crawl_article(article['link'])
article['content'] = content
list_articles
4. Json 파일로 기사 내용 저장
해당 기사의 내용들을 json 파일로 저장한다. json 파일로 저장하는 이유는 추후에 데이터를 쉽게 parsing 하기 위함이다. 한글 데이터를 encoding 할 수 있는 utf-8을 적용한다.
content_file = WORK_DIR + 'articles.json'
with open(content_file, 'w', encoding='utf-8') as f:
for article in list_articles:
f.write(json.dumps(article, ensure_ascii=False))
f.write('\n')
'프로젝트' 카테고리의 다른 글
[LLM 기반 증시 상황 요약 Bot] GPU 환경 준비 (0) | 2024.05.03 |
---|---|
[LLM 기반 증시 상황 요약 Bot][Error] pytorch import error (0) | 2024.05.03 |
[LLM 기반 증시 상황 요약 Bot] (1) 프로젝트 개요 (0) | 2024.05.02 |