본문 바로가기
공대생/무작정 해보는 파이썬

Python Beautifulsoup 네이버 뉴스 크롤링 (1)

by 흔한 공대생 2020. 3. 31.
728x90
반응형

 

 

본 포스팅에서는 python Beautifulsoup 모듈을 이용하여 작일 네이버 랭킹 뉴스의 제목을 크롤링하는 법을 다룬다. 저작권을 침해하지 않는 범위에서 이용해야함을 밝힌다.


01. 들어가며

 이번 주제는 입대한 친구에게 사회 소식을 전해주고 싶다는 생각에서 시작했다. 물론 자대에서는 휴대전화 사용이 가능해졌지만, 훈련소에서만큼은 사회와 단절되어 있을 수밖에 없다. 그래서 위문편지를 통해 사회 소식을 전해주고 싶었다.

 

 위문편지에는 글자 수 제한 등 조건이 있기 때문에 가장 핫한 뉴스의 제목들만 보내기로 했고, 직접 자료를 모으는 것이 귀찮았기 때문에 파이썬을 이용하여 자동으로 뉴스 제목을 가져오는 프로그램을 만들기로 했다.


02. 개요

  1. 네이버 뉴스의 랭킹 뉴스들의 제목을 수집하는 프로그램을 만든다.
  2. python의 beautifulsoup 모듈을 이용하여 웹크롤링을 진행한다.

03. Beautifulsoup

 먼저 크롤링이란, 웹 상에 존재하는 콘텐츠를 수집하는 작업으로, 우리는 html 페이지를 가져와서 필요한 데이터만을 추출하는 것으로 코딩을 진행할 것이다. 이때 유용하게 사용되는 툴이 beautifulsoup이다.

 

설치 방법은 다음과 같다.

  1. 명령 프롬프트(cmd) 실행
  2. pip install bs4 입력
  3. 기다린다

 

혹시 pip 툴이 제대로 작동되지 않는다면 환경변수 지정이 되지 않았을 수 있다.

(환경변수 지정은 다음 포스팅을 참고)

2020/03/31 - [파이썬] - 파이썬 설치 및 기본 세팅

 

파이썬 설치 및 기본 세팅

파이썬 파이썬 공식 홈페이지에서 다운로드한다. (https://www.python.org/downloads/) 다운로드 후 윈도우 검색창에 idle을 검색하면 파이썬 파일을 편집, 실행시킬 수 있는 창이 나온다. 상단 file 탭에서 ne..

commonengineerr.tistory.com

 

기본적인 사용은 다음과 같다.

 

import requests
from bs4 import BeautifulSoup

url = 'https://news.naver.com/main/ranking/popularDay.nhn?rankingType=popular_day&date='+y+m+d

r = requests.get(url)
html = r.content
soup = BeautifulSoup(html, 'html.parser')
titles_html = soup.select('.ranking_section > ol > li > dl > dt > a')

 

bs4로부터 Beautifulsoup을 import 해주고, url을 가져와서 html 페이지를 열고, 원하는 정보를 select 해준다. 이때 8번째 줄이 어떻게 나온 것인지 알아보자.

 

 

크롬으로 네이버 뉴스 - 랭킹 뉴스에 접속하여 f12를 눌러보면 다음과 같은 탭이 열린다.

 

 

 

여기서 기사 제목이 담겨있는 항목을 찾아보자. 자세히 살펴보면 class 이름이 ranking_section othbor 인 div 안에, ol 안에, li 안에, dl 안에, dt 안에 a 안에 있는 title에 뉴스 기사의 제목이 있는 것을 확인할 수 있다.

 

 

 

따라서 기사 제목을 가져오기 위해 다음과 같은 방식으로 경로를 지정해준 것이다.

 

titles_html = soup.select('.ranking_section > ol > li > dl > dt > a')

 

혹은, 기사 제목을 우클릭한 후 검사를 누르면 쉽게 찾을 수 있다.

 

 

위와 같이 경로를 지정해주었다면 titles_html에는 리스트가 저장된다.

 

class 명이 ranking_section (혹은 ranking_section othbor)인 div 섹션이 여러 개이기 때문이다. 즉, 위와 같이 지정한 경로를 만족하는 결과가 여러 개 존재하기 때문에 리스트 형식으로 저장되는 것이다.

728x90
반응형

댓글