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

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

2024. 1. 2. 00:16나의 군 시절

오늘은 지난번에 배운 .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팝 걸그룹 중에서는 최초 출연"이라고 설명했다