'뉴진스' 네이버 뉴스 기사 크롤링

2024. 1. 2. 00:16Portfolio/kakao X goorm 군 장병 AI·SW 교육

Contents 접기

오늘은 지난번에 배운 .find() 함수를 활용하여

킹짱 '뉴진스' 네이버 뉴스 크롤링을 해볼 예정이다.

 

 

뉴스 검색 결과에서 네이버뉴스 추려내기

네이버에 '뉴진스'를 검색하고 주소창을 확인하면

네이버 뉴스검색 URL

 

다음과 같은 url을 확인할 수 있다.

이를 가져와 코드로 작성하고,

 

query = '뉴진스'
url = "https://search.naver.com/search.naver?where=news&query=" + query

킹진스

web = requests.get(url).content
source = BeautifulSoup(web, 'html.parser')

 

웹 페이지의 HTML 내용을 가져와서 파싱하여 source에 구조화 된 형태로 저장하였다. (필요한 정보 추출을 위해)

 

 

네이버뉴스 제목 크롤링

'뉴진스' 검색 후 뉴스 탭에 1번재 페이지에 나타나 있는 뉴스들의 제목을 크롤링 해보자

 

지난 포스팅에 다룬 것처럼 키보드 F12를 누르면 웹사이트의 코드를 확인할 수 있다.

마우스를 올리면 어떤 태그가 어떤 내용을 포함하고 있는지 색상 표시로 알 수 있는데,

뉴스 제목 Tag

 

위와 같이 파란색 영역을 살펴봄녀서 본인이 필요한 정보가 담긴 태그를 찾으면 된다.

 

제목 크롤링에 필요한 부분은 <'a'> 태그의 class="news_tit" 이므로 그 부분을 가져오자.

 

news_subjects = source.find_all('a', {'class' : 'news_tit'}} # Result Set (리스트와 유사)

subject_list = []

for subject in news_subjects:
	subject_list.append(subject.get_text())
    
print(subject_list)

 

['뉴진스, 美 ABC 새해맞이 쇼 출연…"K팝 걸그룹 최초"', '뉴진스, 1월 신인 아이돌그룹 브랜드평판 1위', '일본서 정식 데뷔도 안했는데…뉴진스, 레코드 대상 2관왕', '뉴진스·차은우도 푹 빠진 ‘이것’…20~30만원 가격에도 2030 열광', '뉴진스, 日 ‘홍백가합전’ 후끈 데운다', '엔하이픈·뉴진스, 日 시상식서 K팝 위상 높였다..하이브 파워 증명', '뉴진스, 일본 레코드 대상서 2관왕', '뉴진스, 2억뷰 첫 뮤비 탄생', "[문화연예 플러스] 뉴진스 '일본 레코드 대상' 2관왕", '[아이돌 개인 브랜드평판] 1위 블랙핑크 제니·2위 뉴진스 민지·3위 소녀시대...']

 

쉽다

 

 

다음으로는 네이버뉴스의 링크를 가져와보자

'source' 변수에 저장된 HTML 문서에서 클래스가 "news_tit"인 <a> 태그를 모두 찾고,

태그의 'href' 속성의 값을 가져와 출력하는데, 'href' 속성은 보통 링크 주소를 나타낸다.

# 방법 1
for urls in source find_all('a', {'class' : "news_tit"})
	print(urls.attrs['href'])
    
# 방법 2
for urls in source find_all('a', {'class' : "news_tit"})
	print(urls['href'])

 

https://www.yna.co.kr/view/AKR20240101045500005?input=1195m https://www.mk.co.kr/article/10910869 https://economist.co.kr/article/view/ecn202312310020 https://www.mk.co.kr/article/10910900 http://sports.khan.co.kr/news/sk_index.html?art_id=202312300913003&sec_id=540101&pt=nv http://www.osen.co.kr/article/G1112248251 https://news.kbs.co.kr/news/pc/view/view.do?ncd=7855001&ref=A http://www.tvdaily.co.kr/read.php3?aid=17039135411696814010 https://imnews.imbc.com/replay/2024/nwtoday/article/6558202_36523.html https://www.gukjenews.com/news/articleView.html?idxno=2890603

 

 

여러 뉴스 기사의 원문이 담긴 링크가 아닌 네이버 뉴스에 담긴 링크가 필요하다.

네이버뉴스는 class가 'info'인 <a> 태그에 속한다

 

뉴스 기사의 각 <a> 태그의 'href' 속성 값을 확인하고, 만약 해당 값이

"https://n.news.naver.com"으로 시작한다면, urls_list에 추가하면 된다.

 

urls_list = []

for urls in source.find_all('a', {'class':'info'})
	if urls.attr["href"].startwith("https://n.news.naver.com"):
    	urls_list.append(urls.attrs["href"])
        
urls_list

 

['https://n.news.naver.com/mnews/article/001/0014419910?sid=106', 'https://n.news.naver.com/mnews/article/009/0005238039?sid=106', 'https://n.news.naver.com/mnews/article/243/0000054621?sid=105', 'https://n.news.naver.com/mnews/article/009/0005238059?sid=103', 'https://n.news.naver.com/mnews/article/144/0000934754?sid=106', 'https://n.news.naver.com/mnews/article/109/0004991202?sid=106', 'https://n.news.naver.com/mnews/article/056/0011633010?sid=103', 'https://n.news.naver.com/mnews/article/214/0001321815?sid=106']

 

 

 

단일 뉴스 페이지 분석하기

뉴스 기사 링크 중 첫번째 기사를 가지고 놀아보자

 

제목 크롤링
# HTML 파싱
web_news = requests.get(urls_list[0]).content
source_news = BeautifulSoup(Web_news, 'html.parser')

# 제목 크롤링
title = source_news.find('h2', {'class' : 'end_tit'}).get_text()
print(title)

 

뉴진스, 美 ABC 새해맞이 쇼 출연…"K팝 걸그룹 최초"

 

 

기사 작성 날짜
date = source_news.find('span', {'class' : 'author'}).get_text()
print(date)

 

2024.01.01. 오후 6:55

 

 

기사 본문
article = source_news.find('div', {'id' : 'articeBody'}).get_text()

 # 개행 문자 -> 빈 문자열 대체
article = article.replace("\n", "")

article = article.replace("// flash 오류를 우회하기 위한 함수 추가function _flash_removeCallback() {}", "")

# "동영상 뉴스" 문자열 -> 빈 문자열 대체
article = article.replace("동영상 뉴스       ", "")
article = article.replace("동영상 뉴스", "")

# 기사 양 끝에 있는 공백 제거
article = article.strip()

# "\'" 기호 삭제
pattern = re.compile(r'\'')
news_contents = pattern.sub('', article) # substitute

# 기자 이메일 주소부터 그 이후 삭제
pattern = re.compile(r'[\s\\a-zA-Z0-9]*@')
email_address = pattern.search(news_contents)
news_contents = news_contents[:email_address.start()]

print(article)

 

(서울=연합뉴스) 최재서 기자 = 그룹 뉴진스가 K팝 걸그룹 최초로 미국 ABC방송 새해맞이 특집 쇼에 출연했다고 1일 소속사 어도어가 밝혔다. 뉴진스는 작년 12월 31일(현지시간) 미국 ABC방송 딕 클라크스 뉴 이어스 로킹 이브 위드 라이언 시크레스트(Dick Clarks New Years Rockin Eve with Ryan Seacrest)에 출연해 슈퍼 샤이(Super Shy)와 ETA 무대를 선보였다. 이 프로그램은 미국에서 가장 많이 시청되는 새해맞이 특집 쇼로, 올해도 포스트 말론과 카디 비 등 쟁쟁한 팝스타들이 출연했다. 소속사는 "뉴진스는 올해 뉴 이어스 로킹 이브 라인업에 유일한 K팝 아티스트로 이름을 올렸다"며 "K팝 걸그룹 중에서는 최초 출연"이라고 설명했다