02. BeautifulSoup 이용한 네이버 뉴스 데이터 수집
BeautifulSoup 와 requests를 이용하여 네이버 뉴스 데이터를 수집해보았다.
내가 수집한 뉴스는,,
https://sports.news.naver.com/news?oid=117&aid=0003705467
(콘테 경질되길 바라는 ,,, 나의마음을 담은..)
import requests
from bs4 import BeautifulSoup
url = "https://sports.news.naver.com/news?oid=117&aid=0003705467"
res = requests.get(url)
res
결과가 Response [503]이 나오면 return이 되지 않는 경우다.
Response [200]이 니와야 정상이다.
Response[503]이 나올때는,
오른쪽 상단 점 세개 -> 도구 더보기 -> 개발자 도구
network에서 f5하여 새로고침 한후 name의 맨위를 클릭하면 이렇게 뜬다
request header는 내가 요청한 것 reponse header는 내가 요청한 헤더로 부터 받은 응답이다
request header의 user-agent 를 받아 온다
import requests
from bs4 import BeautifulSoup
url = "https://sports.news.naver.com/news?oid=117&aid=0003705467"
h= {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
res = requests.get(url,headers= h)
res
이렇게 하면 예쁘게 response200이 나온다
이제 BeautfiulSoup에서 데이터를 가져오겠습니다
DevTools 에서 왼쪽 마우스 표시를 가져온다 날짜와 제목 언론사 기사내용을 가져올거다
날짜를 클릭하니 div class = 'info'라고 뜬다
html parser후 div.info로 select 하여 데이터를 가져왔다.
bs = BeautifulSoup(res.content,'html.parser')
date = bs.select('div.info')
date
그랬더니 모든 div info를 가져온다.
첫번째 줄에 있는 날짜만 가져오기 위해 이렇게 코드를 수정했다
이렇게 이쁘게 나온다.
다음으로 제목을 가져오기 위해 다시 devTools에서 제목을 클릭했다.
#제목 가져오기
title = bs.select('h4.title')[0].text
title
다음으로 언론사명을 가져오기 위해 언론사 로고를 클릭했다
위에 span을 가져오고 class인 logo,img를 가져온다. 마이데일리를 받는 alt도 받아온다
#언론사명 가져오기
media = bs.select('span.logo a img')[0]['alt']
media
뉴스 내용을 가져오기 위해 뉴스 본문을 클릭한다.
본문 가져오면서 생기는 탭과 태그를 제거한다.
#뉴스 내용 가져오기
bs.select('div#newsEndContents')
#태그 같이 나옴, 태그제거하기, 탭제거
content =bs.select('div#newsEndContents')[0].get_text().replace('\n','').replace('\t','')
content
date, title,media, content를 리턴하는 get_naver_news함수를 받아온다
다른글은 모르겠으나 내가 가져올 뉴스 데이터가 하나로 합쳐져 있어서 뉴스 바닥글까지 다긁어옴
뒤에 제거하려고 이렇게 했으나 계속 오류가 남,,, 해결방법은 찾으면 업뎃하겠습니다
news.replace('[포체티노 감독과 손흥민. 사진 = 게티이미지코리아](김종국 기자 calcio@mydaily.co.kr)기사제공 마이데일리김종국 기자 calcio@mydaily.co.kr김종국 기자구독김종국 기자의 구독을 취소하시겠습니까?구독에서 해당 기자의 기사가 제외됩니다.예아니오닫기구독자-응원수-마이데일리 스포츠/축구 담당 김종국 기자입니다.\'케인 영입→미드필더 기용\'…맨유의 충격적인 베스트11시속 170km\'미사일 골\'→네덜란드 레전드 "힘과 기술 완벽"Copyright ⓒ 마이데일리. All rights reserved. 무단 전재 및 재배포 금지.기사 섹션 분류 가이드기사 섹션 분류 안내스포츠 기사 섹션(종목) 정보는 언론사 분류와 기술 기반의 자동 분류 시스템을 따르고 있습니다. 오분류에 대한 건은 네이버스포츠로 제보 부탁드립니다.','')
출처:https://github.com/insightcampus/sesac-nlp/tree/main/ipynb