Deep Learning/NLP

02. BeautifulSoup 이용한 네이버 뉴스 데이터 수집

해파리냉채무침 2023. 3. 10. 16:40

 

BeautifulSoup 와 requests를 이용하여 네이버 뉴스 데이터를 수집해보았다.

내가 수집한 뉴스는,,

https://sports.news.naver.com/news?oid=117&aid=0003705467 

 

콘테 경질→포체티노 복귀…'토트넘 선수들도 원한다'

[마이데일리 = 김종국 기자] 포체티노 감독의 토트넘 복귀에 대한 기대감이 높아지고 있다.영국 스카이스포츠는 10일(한국시간) '토트넘 선수들은 포체티노 감독의 복귀를 원한다. 콘테 감독은

sports.news.naver.com

(콘테 경질되길 바라는 ,,, 나의마음을 담은..)

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