본문 바로가기

파이썬 프로그래밍/파이썬 크롤링

[Python] 네이버 실시간검색어 크롤링 실습

본 포스트는 nomade.kr의 강의를 바탕으로 정리한 포스트입니다.


실습환경 Python Version: 3.6.0



1. 페이지 탐색

이번시간에는 네이버 실시간 검색어를 크롤링해 보겠습니다.

UI를 보면 실시간 급상승과 함께 1~10위, 11~20위 두파트로 나뉘어 집니다.



[오른마우스클릭] - [페이지소스보기]

로 부분을 찾아봅니다.

소스를 보고 유일성을 찾아보겠습니다.



v체크된 class안에 실시간 검색어가 포함되어 있고,

그밑에 <li class="ah_item">마다 검색어가 있으며

검색어는 <span class="ah_k">가 되겠습니다.


우리는 이 힌트를 가지고 크롤링을 해보겠습니다.



2. 크롤링 시작

본 코드는 제가 임의대로 짠것이기 때문에 다를수 있습니다. 하지만 결과는 잘나옵니다.


html코드 출력

requests를 사용하여 html을 응답받아와서 출력합니다.

잘나오네요. 하지만 모든 html코드가 나오기 때문에 잘라내야 합니다.



지금 저는 원하는 부분을 select하기 위해 CSS Selector를 사용할 것입니다.

모르시는분은 (클릭)하셔서 숙지하고 오시면 이해하시기 수월하십니다.



내가 원하는 부분 1차 출력

그래서 저는 BeautifulSoup를 사용하여 select 했습니다.

class의 PM_CL_realtimeKeyword_rolling안에 있는 모든 태그들을 출력해봅니다.

실시간 검색어들끼리 잘 출력이 되었습니다.

자세히보면 span class="ah_k"가 실시간 검색어같으므로 span을 추가로 잘라내봅니다.

.은 해당 class가 포함된 모든 태그를 출력하는 CSS Selector 입니다.



세분화하여 2차출력

PM_CL_realtimeKeyword_rolling안에 span이라는 class의 문자열로 ah_k가 매칭되는 모든 Tag를 불러온다.

즉. PM_CL_realtimeKeyword_rolling안에 ah_k 를 가지고있는 모든 class를 불러오는 뜻입니다.


span별로 아주 잘나오네요. span이란 불필요한 태그들을 잘라내고 싶습니다.

타이틀만 쏙 빼보겠습니다.

 


태그를 제거하고 값만 빼오기 

text를 사용하여 값만 빼오며 enumerate를 사용하여 넘버링까지 했습니다.


소스

1
2
3
4
5
6
7
8
9
10
import requests
from bs4 import BeautifulSoup
 
html = requests.get('https://www.naver.com/').text
soup = BeautifulSoup(html, 'html.parser')
 
title_list = soup.select('.PM_CL_realtimeKeyword_rolling span[class*=ah_k]')
 
for idx, title in enumerate(title_list, 1):
    print(idx, title.text)
cs







보너스! 조금더 디테일하게 꾸며보기

1
2
3
4
5
6
7
8
9
10
import requests
from bs4 import BeautifulSoup
 
html = requests.get('https://www.naver.com/').text
soup = BeautifulSoup(html, 'html.parser')
 
title_list = soup.select('.PM_CL_realtimeKeyword_rolling span[class*=ah_k]')
 
for idx, title in enumerate(title_list, 1):
    print("{}{} {}".format(idx, '위', title.text))
cs