슬기로운 개발자생활/크롤링

[데이터 크롤링] 네이버 뉴스 기사 데이터 크롤링 방법 + 자동화

개발자 소신 2020. 11. 27. 22:56
반응형

안녕하세요 소신입니다 !

뉴스기사 분석을 통해 다양한 인사이트를 얻을 수 있습니다.

네이버 뉴스는 다양한 언론사를 포함하고 있기 때문에 주제, 분야별로 나눠 다양한 분석을 진행할 수 있습니다.

 

그럼 바로 크롤링 스타뜨


1. 패키지 Import

웹 데이터를 주고받기 위한 requests 패키지와

웹 구조를 따라 크롤링 할 수 있게 해주는 BeautifulSoup을 임포트 해줍니다.


2. 네이버 검색을 위한 URL 확인

위에 저렇게 URL 있죠? 저걸 가져옵니다.

 

url_format = 
	'https://search.naver.com/search.naver?&where=news&query={검색어}
    &sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=3&ds={시작 날짜}&de={종료 날짜}
    &docid=&nso=so:r,p:from{시작 날짜}to{종료 날짜},a:all&mynews=0&cluster_rank=34
    &start={페이지 번호}'

네이버 뉴스기사 URL의 키포인트는 다음과 같습니다.

query : 검색어

ds, de : 시작, 종료 날짜 (2020.11.30)

from, to : 시작, 종료 날짜 (20201130)

start : 페이지 번호 (1, 11, 21, 31)


3. 네이버 검색 결과 크롤링

format으로 url을 바꿔가면서 크롤링 할 수 있도록 했습니다.

r이라는 변수에 웹사이트를 가져와 저장합니다.

 

그 후 BeautifulSoup으로 파싱하여 원하는 데이터만 가져올 수 있게 sp변수에 저장해놓습니다.

 

어떤 HTML 구조를 가지고 있는지 알아보기 위해

뉴스기사에 오른쪽클릭으로 검사를 해봅니다.

우선 크게 group_news라는 클래스명으로 <div>안에 들어가있고

list_news 클래스 안에 <ul>태그, 그리고 bx클래스 안에 <li>태그로 들어가 있는 것을 확인할 수 있습니다.

그리고 <li>태그 안에 뉴스기사 하이퍼링크까지 있는것을 확인 할 수 있네요

저 하이퍼링크로 들어가서 뉴스기사를 가져오기 위해 selector를 작성해줍니다.


4. 검색된 뉴스 기사를 가져오는 Selector 작성

네이버 뉴스기사는 대부분 class로 이루어져있고 id는 유일한 값만 가져올 수 있기 때문에

class( . )로 selector를 작성했습니다.

group_new 클래스인 div > 바로 하위에 있는 list_news클래스인 ul > 바로 하위에 있는 li

news_area클래스 div를 가져와 바로 하위에 하이퍼링크가 달린 a태그를 가져옵니다.

 

한 페이지에 10개의 뉴스기사가 있기 때문에 sources의 길이가 10으로 나온 것을 확인할 수 있습니다.


5. 뉴스 기사 URL 가져오기

위에서 확인한 sources는 배열이기 때문에 for문을 돌리면,

attrs속성의 'href'로 뉴스기사 URL을 가져올 수 있습니다.

 

6. 뉴스기사 본문 태그 확인

일단 언론사 별로 홈페이지를 다르게 제작했기 때문에 가장 위에 있는 중앙일보 뉴스기사를 크롤링해보겠습니다.

우리가 크롤링할 사이트는 여기입니다.

 

마찬가지로 본문에서 검사를 클릭해 사이트가 어떻게 만들어졌는지 확인합니다.

 

음.. 대충 div#body > div#content > div#article_body로 가져오면 될 것 같네요


7. 뉴스기사 본문 Selector 작성

위의 뉴스 기사를 가져오면

text로 출력시 다음과 같이 데이터를 뽑을 수 있습니다.

 

어때요 뉴스기사 크롤링 정말 쉽죠?

 


ㅇ 자동화

 

이런 방식으로 for문을 돌려 특정 기간의 뉴스기사를 자동으로 크롤링하는 봇을 만들 수 있습니다.

어때요? 자동화는 더쉽죠?

 

 

중앙일보 뉴스기사만 가져와질텐데

앞에서 한 것처럼 다른 언론사 사이트로 들어가서 검사한 뒤

if문으로 언론사 별 selector를 작성해 크롤링하시면 됩니다.

 

ㅇ 전체 코드

NAVER_News.ipynb
0.02MB

 


 

크롤링 외주 가능 (비동기식으로 빠른 크롤링 가능합니다.)

  • 인스타그램 해시태그 기반 포스트 크롤링
  • 인스타그램 특정 유저 포스트 크롤링
  • 네이버 뉴스기사 크롤링 (비동기)
  • 네이버 분석 보고서 크롤링(시황, 투자, 종목, 산업, 경제, 채권 분석 보고서)
  • 시장 지표(콜금리, 표준금리, WTI, 브렌트유, 금, 환율), 주가지표
  • 쇼핑몰 (11번가, SSG.COM) 상품 크롤링
  • 네이버 웹툰 데이터 크롤링 (저작권 상 사진은 크롤링 불가합니다.)
  • 기타 원하는 사이트 협의 !

TXT, CSV, JSON, 엑셀 등 원하는 양식으로 만들어서 보내드립니다.

크롤링 데이터 데이터베이스에 직접 추가할 수 있습니다. (추가비용 있습니다.)

사진 파일도 크롤링 가능합니다. (추가비용 있습니다.)

 

반응형