파이썬 웹 크롤링으로 네이버 뉴스 제목을 수집해 보겠습니다. 파이썬으로 하는 이유는 라이브러리가 많고 문법이 단순해서 초보자들도 쉽게 다룰 수 있기 때문입니다.
파이썬 웹 크롤링
웹 크롤링(Web Crawling)은 특정 웹사이트에서 대량의 데이터를 자동으로 수집하는 프로세스를 말합니다. 크롤링은 하는 이유는 매우 다양합니다. 여기서 다루고자 하는 네이버 뉴스 제목 가져오기가 하루 업무에 포함되어 있으신 분들은 그 동안 단순작업 하시느라 많이 짜증 나셨을텐데요. 파이썬 프로그램에게 이 일을 시키면 1분이면 여러분의 오전 업무가 끝날 것입니다.
네이버 뉴스 제목 가져오기
아래 그림은 네이버 뉴스탭에서 삼성전자를 검색 했을 때 나오는 화면입니다. 그림은 일부만 보이지만 뉴스 제목이 아래에 더 있습니다. 직접 검색해보시면 바로 확인 할 수 있습니다. 해당 페이지에 언론사, 발행시간, 요약기사 모두 크롤링 할 수 있는데요. 여기서는 뉴스 제목을 해보겠습니다.
웹 페이지 소스 가져오기
이번 네이버뉴스 크롤링에서는 requests 라이브러리를 이용합니다. requests로 해당 페이지의 소스를 가져오고 beautifulsoup 라이브러리로 페이지 소스를 분석하고 필요한 부분을 추출합니다.
import requests
from bs4 import BeautifulSoup
# 네이버 뉴스의 URL
keyword = input("검색할 키워드를 입력하세요 : ")
url = f"https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}"
# 웹 페이지를 요청합니다.
response = requests.get(url)
# 페이지의 내용을 파싱합니다.
html = response.text
soup = BeautifulSoup(html.text, 'html.parser')
keyword 변수에 input으로 검색할 키워드를 입력합니다. url은 위 그림의 검색창에 있는 주소에 keyword를 변수로 입력한 것입니다. f-string을 이용한 것입니다. 설명드리는 부분 중 모르는 것은 구글링을 통해서 확인해보시기 바랍니다. 참고로 이제 크롤링에 입문하시는 분들은 위의 코드를 공식처럼 이용하시면 됩니다.
뉴스 제목 찾기
크롤링에서 목표물을 찾는게 가장 중요합니다. 지면으로 설명하는게 조금 어렵지만 잘 따라오시기 바랍니다.
1. 먼저 네이버 홈페이지 메인 화면에서 아래 그림과 같이 뉴스 탭을 클릭합니다.
2. 검색창에 삼성전자를 클릭합니다.
3.주소창에서 주소를 복사합니다.
4. 화살표 모양을 클릭하고 기사 제목을 클릭합니다.
5. 제목을 포함하는 태그의 클래스 찾기
제목을 포함하는 a태그의 클래스 news_tit를 찾았습니다.
네이버 뉴스 제목 크롤링 하기
네이버 뉴스 제목 크롤링이 궁금하셔서 여기에 들어오신 분들이므로 파이썬 프로그램과 vscode같은 에디터는 기본적으로 설치되어 있을 것으로 생각되어 별도로 설명 드리지 않겠습니다. 먼저 위에 알려드린 웹페이지 소스 코드와 제목을 가져오는 코드 전체는 아래와 같습니다.
import requests
from bs4 import BeautifulSoup
# 네이버 뉴스의 URL
keyword = input("검색할 키워드를 입력하세요 : ")
url = f"https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}"
# 웹 페이지를 요청합니다.
response = requests.get(url)
# 페이지의 내용을 파싱합니다.
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 뉴스 제목이 있는 태그를 찾아갑니다.
articles = soup.select('.news_tit')
# 추출한 뉴스 제목을 출력합니다.
for i, article in enumerate(articles, start=1):
print(f"{i}. {article.text}")
먼저 vscode에서 파이썬 파일을 하나 만듭니다.
위 코드를 복사 붙여넣기 하세요.
requests와 bs4가 설치 안되신 분들은 임포트 하시기 바랍니다.
vscode 터미널에서 pip install requests 명령을 입력 후 실행하시면 requests라이브러리가 임포트 됩니다. bs4도 같은 방법으로 임포트 하시면 됩니다.
코드설명
articles = soup.select(‘.news_tit’)
이 코드는 웹 페이지에서 “news_tit”라는 클래스를 가진 모든 요소를 찾아서 그 목록을 articles
라는 변수에 저장합니다. 이렇게 하면 articles
안에 여러 뉴스 제목을 가져온 태그들이 담기게 됩니다.
for i, article in enumerate(articles, start=1):
print(f”{i}. {article.text}”)
이 코드는 articles
변수에 담긴 뉴스 제목들을 하나씩 꺼내어 번호와 함께 출력하는 역할을 합니다.
for i, article in enumerate(articles, start=1): 이 줄은 articles
목록에 있는 뉴스 제목들을 하나씩 꺼내서 반복(iteration)하도록 합니다.
enumerate(articles, start=1)
부분은 articles
의 각 요소에 번호를 붙여줍니다. 여기서 start=1
은 번호를 1부터 시작하게 하는 설정입니다.
print(f”{i}. {article.text}”) 이 줄은 뉴스 제목을 번호와 함께 출력합니다. f"{i}. {article.text}"
는 파이썬의 f-string 문법을 사용해, i
와 article.text
값을 문자열로 만들어줍니다. article.text
는 article
변수에 담긴 HTML 요소에서 텍스트(즉, 뉴스 제목)만 가져옵니다.
예를 들어, i
가 1이고, article.text
가 “Example News Title”이라면, "1. Example News Title"
이 출력됩니다.
출력결과
출력결과가 아래 그림과 같이 나오게 됩니다.
마무리
이 번 글에서는 네이버 뉴스 탭에서 검색어를 입력하여 해당되는 뉴스의 제목을 크롤링 해봤습니다. 이 코드는 관련도순으로 나열된 기사 제목을 가져오게 되어있습니다. 다음 번에는 최신순으로 가져오는 코드를 알아보겠습니다. 그리고 기사 제목 외에 발행한 언론사, 발행시간, 기사요약, 이미지를 가져오는 코드를 알아보겠습니다.