티스토리 뷰
※이 글은 자기개발 및 복습을 위한 글로, 야후 뉴스 크롤링에 대한 파이썬 코딩을 만드는 방법을 작성하는 글임을 밝힌다.
주식을 하다 보면, Telegram이나 카카오 오픈채팅 등의 소스에서 뉴스를 접하는 경우가 많은데, 남이 떠먹여 주기만 해서는 내가 시사에 관심을 가질 수 없음을 깨닫는다. 그래서 직접 Yahoo News의 자료들을 크롤링하여, 해당 내용들 중 중요한 내용들을 요약하여 내 텔레그램 Bot에 요약 자료까지 발송하는 일련의 가정을 작성하고자 한다.
https://wjjw.tistory.com/entry/Yahoocrawling1
[파이썬/응용]Yahoo 뉴스 자료 크롤링(1) / 원하는 뉴스 주소 크롤링
※이 글은 자기개발 및 복습을 위한 글로, 야후 뉴스 크롤링에 대한 파이썬 코딩을 만드는 방법을 작성하는 글임을 밝힌다.주식을 하다 보면, Telegram이나 카카오 오픈채팅 등의 소스에서 뉴스를
wjjw.tistory.com
포스팅 1에서 야후 뉴스 크롤링을 했다.
https://wjjw.tistory.com/entry/Yahoocrawling2
https://wjjw.tistory.com/entry/Yahoocrawling3
https://wjjw.tistory.com/entry/Yahoocrawling4
그리고 포스팅2~4를 통해 저성능용 로컬 LLM 설치를 완료했다.
나는 크롤링된 뉴스 href에 적힌 url과 LLM을 이용하여 영문 뉴스 요약 봇을 만들 것이다.
우선 해야할 일은
1. URL 기준으로 뉴스 제목과 기사를 추출하는 함수 생성
2. Ollama에서 설치한 LLM과 python을 연동하여 1을 실행
두 가지인데, 차례대로 진행하도록 한다.
1. URL 기준으로 뉴스 제목과 기사를 추출하는 함수 생성
최근 이슈가 된 일론머스크가 OpenAI에 대한 매수의사를 밝힌 건을 예시로 들어보도록 한다.
※우선 URL 추출하는 것은 (1) 포스팅을 참고하면 된다.
[파이썬/응용]Yahoo 뉴스 자료 크롤링(1) / 원하는 뉴스 주소 크롤링
※이 글은 자기개발 및 복습을 위한 글로, 야후 뉴스 크롤링에 대한 파이썬 코딩을 만드는 방법을 작성하는 글임을 밝힌다.주식을 하다 보면, Telegram이나 카카오 오픈채팅 등의 소스에서 뉴스를
wjjw.tistory.com
import requests
from bs4 import BeautifulSoup
def get_news(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.select('div.cover-headline div') # 클래스명으로 선택
body = soup.select('div.body-wrap') # 클래스명으로 선택
if title and body:
return [
title[0].get_text(strip=True), # 첫 번째 요소: 제목
body[0].get_text(strip=True), # 두 번째 요소: 내용
url # 세 번째 요소: URL
]
return [] # 결과가 없을 경우 빈 리스트 반환
1. 라이브러리 임포트
import requests # HTTP 요청을 보내기 위한 라이브러리
from bs4 import BeautifulSoup # HTML 파싱을 위한 라이브러리
2. 함수 정의def get_news(url): # URL을 매개변수로 받는 함수 정의
3. 헤더 설정
headers = { 'User-Agent': 'Mozilla/5.0...' # 웹 브라우저처럼 보이게 하는 User-Agent 설정 }
- 웹사이트가 봇을 차단하는 것을 방지하기 위한 설정
- 실제 브라우저처럼 보이게 함
4. 웹 요청 및 파싱
response = requests.get(url, headers=headers) # URL에 GET 요청
soup = BeautifulSoup(response.text, 'html.parser') #HTML 파싱
5. 요소 선택
우선 제목에서 검사를 누르고 항목을 찾아보면 cover-headline division의 하위 division임을 알 수 있다.
그리고 본문은 body-wrap division에 있음을 알 수 있다. 이를 각각 title과 body로 입력했다.
title = soup.select('div.cover-headline div') # 제목 요소 선택
body = soup.select('div.body-wrap') # 본문 요소 선택
- CSS 선택자를 사용하여 특정 클래스를 가진 요소 선택
- div.cover-headline div: cover-headline 클래스를 가진 div 안의 div 요소
- div.body-wrap: body-wrap 클래스를 가진 div 요소
6. 결과 반환
if title and body:
return [
title[0].get_text(strip=True), # 첫 번째 요소: 제목
body[0].get_text(strip=True), # 두 번째 요소: 내용
url # 세 번째 요소: URL
]
return [] # 결과가 없을 경우 빈 리스트 반환
- get_text(strip=True): 텍스트만 추출하고 앞뒤 공백 제거
- 결과를 리스트 형태로 반환
결과값은 아래와 같다.
이렇게 지정된 값을 이제 Ollama에서 설치한 LLM과 연동해보자.
2. Ollama에서 설치한 LLM과 python을 연동하여 1을 실행
추출한 뉴스의 제목은 그대로 두고 본문을 요약한다면, 직관적으로 이해하기 쉬울 것이라 판단하여 본문만 요약하는 쿼리를 짰다.
ollama 연동은 상대적으로 쉬운데, 쿼리는 아래와 같다.
import ollama
def summary_ai(news):
response = ollama.chat(
model='myllm',
messages=[{
'role': 'user',
'content': f"""
Summarize the following news in two parts:
Key Summary:
- Provide exactly 5 clear, concise sentences capturing the main story
- Focus on facts and key developments
- Present in chronological order when possible
Main Points:
- List exactly 3 essential takeaways
- Each point should be one clear, complete sentence
- Focus on impact and significance
News text:
{news[1]}
"""
}]
)
return response.message.content
print(summary_ai(news))
1. 라이브러리 임포트
import ollama # Ollama AI 모델을 사용하기 위한 라이브러리 임포트
2. 함수 정의 및 호출
def summary_ai(news):
response = ollama.chat(
model='myllm',
messages=[{
'role': 'user',
'content': f"""
Summarize the following news in two parts:
Key Summary:
- Provide exactly 5 clear, concise sentences capturing the main story
- Focus on facts and key developments
- Present in chronological order when possible
Main Points:
- List exactly 3 essential takeaways
- Each point should be one clear, complete sentence
- Focus on impact and significance
News text:
{news[1]}
"""
}]
)
return response.message.content
함수를 정의 해주는데, ollama.chat 함수를 사용하면 된다.
model을 지정해준 뒤, message를 dictionary 형식으로 지정하고
response->message->content를 반환해주면 끝!
해당 작업을 실행해보면, 영문으로 뉴스를 잘 요약해줌을 확인할 수 있다.
(반복 시, 내용이 계속 바뀐다.)
'자기개발 > 취미코딩' 카테고리의 다른 글
[파이썬/응용]Yahoo 뉴스 자료 크롤링(4) / 저성능PC에서 구동 가능한 LLM "Bllossom/llama-3.2-Korean-Bllossom-3B" 설치 / LLM 튜닝 (0) | 2025.02.15 |
---|---|
[파이썬/응용]Yahoo 뉴스 자료 크롤링(3) / Ollama 환경에서 EEVE 모델 설치 (1) | 2025.02.13 |
[파이썬/응용]Yahoo 뉴스 자료 크롤링(2) / Ollama 설치 및 활용 (0) | 2025.02.11 |
[파이썬/응용]Yahoo 뉴스 자료 크롤링(1) / 원하는 뉴스 주소 크롤링 (0) | 2025.02.10 |
[파이썬/기초]32bit 가상환경 만들기 (0) | 2025.02.09 |
- Total
- Today
- Yesterday
- 원주맛집
- 콜사이
- 레시피
- 4WD투어
- 맛집
- 악타우산
- Ollama
- 춘천여행
- 닭요리
- 프랑스
- Anaconda
- 코딩
- 카자흐스탄
- 파이썬실용
- 춘자
- 요리
- 파이썬
- python
- LLM
- 요리레시피
- 캠핑
- 뉴스자동화
- 알마티
- 원주
- 알틴에멜
- 실비막국수
- 내돈내산
- 여행
- 반곡동
- 명륜동맛집
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |