Python

[파이썬] 특정 키워드 네이버 뉴스 크롤링 - BeautifulSoup

weweGH 2025. 3. 27. 20:02
반응형

네이버 뉴스 크롤링
네이버 뉴스 크롤링


특정 키워드 네이버 뉴스 크롤링 - BeautifulSoup


들어가며


비트코인 자동 매매 프로그램을 만들기 전에 '비트코인'에 대한 뉴스를 크롤링해서 텍스트 분석을 먼저 진행하기로 했습니다. 우선, '비트코인'을 키워드로 네이버 뉴스 제목을 추출하는 방법을 소개합니다.


  • 키워드, URL 설정
  • 웹 페이지 요청
  • 뉴스 제목 데이터프레임 생성

키워드, URL 설정


먼저 필요한 패키지인 requests와BeautifulSoup를  import합니다.

import requests
from bs4 import BeautifulSoup

검색할 키워드는 '비트코인'으로 설정했습니다. 네이버 뉴스 url은 형식이 잘 갖춰져있어 크롤링하기 매우 편리합니다.

keyword = '비트코인'
url = f'https://search.naver.com/search.naver?where=news&query={keyword}'

위에서 설정한 url인 'https://search.naver.com/search.naver?where=news&query=비트코인'을 검색 창에 그대로 입력하면, 아래 이미지와 같이 '비트코인'에 대한 뉴를 확인할 수 있습니다.

비트코인 네이버 뉴스
비트코인 네이버 뉴스


웹 페이지 요청


위의 url로 웹 페이지에 요청을 보내서 응답을 response에 저장합니다. requests.get()은 웹 페이지에 접속하여 해당 페이지의 HTML 코드 전체를 가져오는 코드입니다. 

# 웹 페이지 접속
response = requests.get(url)

이제 위에서 가져온 HTML 코드(response.text)를 파싱할 수 있도록 BeautifulSoup를 활용합니다. 간단하게, 위의 response는 웹 페이지를 접속하는 부분이고, soup는 웹 페이지를 편리하게 파싱할 수 있도록 도와주는 도구라고 할 수 있습니다.  

# HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')

이 글의 최종 목표는 네이버 뉴스 제목을 크롤링하는 것이므로 불러온 HTML 코드에서 뉴스 제목이 포함된 부분만 articles에 저장하겠습니다. aricles를 확인해보면 아래 이미지와 같이 news_tit에 해당하는 부분만 불러온 것을 확인할 수 있습니다.

articles = soup.select('.news_tit')
articles

news_tit 부분 추출
news_tit 부분 추출


aritcles 중 하나에 대해 뉴스 제목 텍스트를 추출하면 다음과 같습니다.

article = articles[0]
title = article.text
title

뉴스 제목 추출
뉴스 제목 추출

반응형

뉴스 제목 데이터프레임 생성


articles를 활용하여 뉴스 제목을 데이터프레임으로 정리하겠습니다. 

import pandas as pd

title_tot = pd.DataFrame([article.text for article in articles], columns=['title'])
title_tot.head()

title_tot 데이터프레임
title_tot 데이터프레임


이 글에서는 네이버 뉴스 제목을 파이썬을 활용하여 크롤링하는 방법을 소개했습니다. 추출한 뉴스 제목을 감정 분석을 통해 비트코인 자동 매매 프로그램에 활용할 예정입니다.


전체 코드


import requests
from bs4 import BeautifulSoup
import pandas as pd

# 키워드, URL
keyword = '비트코인'
url = f'https://search.naver.com/search.naver?where=news&query={keyword}'

# 웹 페이지 요청
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# news_tit 부분 필터링
articles = soup.select('.news_tit')
articles

# 뉴스 제목 확인
article = articles[0]
title = article.text
title

# 뉴스 제목 데이터프레임 생성
title_tot = pd.DataFrame([article.text for article in articles], columns=['title'])
title_tot.head()

 

반응형