2024. 1. 2. 00:16ㆍLearning Journey/AI·SW Education Projects
오늘은 지난번에 배운 .find() 함수를 활용하여
킹짱 '뉴진스' 네이버 뉴스 크롤링을 해볼 예정이다.
뉴스 검색 결과에서 네이버뉴스 추려내기
네이버에 '뉴진스'를 검색하고 주소창을 확인하면
다음과 같은 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를 누르면 웹사이트의 코드를 확인할 수 있다.
마우스를 올리면 어떤 태그가 어떤 내용을 포함하고 있는지 색상 표시로 알 수 있는데,
위와 같이 파란색 영역을 살펴봄녀서 본인이 필요한 정보가 담긴 태그를 찾으면 된다.
제목 크롤링에 필요한 부분은 <'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
여러 뉴스 기사의 원문이 담긴 링크가 아닌 네이버 뉴스에 담긴 링크가 필요하다.
뉴스 기사의 각 <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팝 걸그룹 중에서는 최초 출연"이라고 설명했다
'Learning Journey > AI·SW Education Projects' 카테고리의 다른 글
AI, 정말 믿을 수 있을까? (2) | 2025.01.31 |
---|---|
쇼생크 탈출과 갓파더 리뷰 텍스트 유사도 비교 (4) | 2024.01.01 |
나는 나랑 닮은 사람이 좋아. (0) | 2023.12.29 |
Darknight 리뷰 Exploration & Visualization (2) | 2023.12.29 |
Preprocessing Text Data (2) | 2023.12.27 |