python으로 네이버 실시간 검색어 크롤링하기(2)

반응형

1탄에서 네이버 실시간 검색순위를 크롤링을 하는 것을 해보았다.

https://tkdrms568.tistory.com/161

 

python을 이용하여 네이버 실시간 검색순위 뽑아오기(크롤링)

케이쉴드 인원들과 술을 먹다가 전 케이쉴드 매니저 현 동네친구가 된 친구에게 코딩하기 싫다고 찡찡대니 친구가 스크립트 언어부터 시작하는게 어떻냐고 물어보면서 간단하게 크롤링하는 방법을 보여주었는데 먼..

tkdrms568.tistory.com

그리고 결과를 보내주었더니 

지저분하다고 좀 더 가공해보라고 하였다.

그래서 좀 더 가공해 보기로 하였다.

코드를 확인해보니

실시간 검색어 는 "ah_k"라는 속성값으로 시작하였다.

그래서 select문을 이용하여 "ah_k"값만 뽑아 보았다.

범위를 벗어났다고 한다.

그래서 코드를 좀 더 살펴 보기로 했다.

print(html)을 통해 코드를 출력해보았다.

<h3 class="blind">급상승 검색어 검색어</h3>
<div class="ah_roll_area PM_CL_realtimeKeyword_rolling">
<ul class="ah_l">
<li class="ah_item">
<a href="#" class="ah_a" data-clk="lve.keyword">
<span class="ah_r">1</span>
<span class="ah_k">김규리</span>
</a>
</li>

출력해서 코드를 살펴보면 이 부분이 실시간 검색어와 관련되어 있을 것 같다는 생각이 들었다.

그래서 이 코드를 천천히 읽어 보았다.

코드를 살펴보니 F12 눌러서 element 요소만 보았을 때와 달리 "ah_roll_area PM_CL_realtimeKeyword_rolling"이라는 속성값이 존재했다.

그래서 select를 통해 이 속성값의 값만 뽑아 보았다.

rank = soup.select('ah_roll_area PM_CL_realtimeKeyword_rolling')

그러고 rank값을 출력하니

매우 당황스러웠다.

그래서 삽질을 해보다가 

rank = soup.select(' .PM_CL_realtimeKeyword_rolling')

다음과 같이 입력해보니

밑에는 짤렸지만 전에 했던 것처럼 2번씩 출력되는 것도 없어졌다.

여기서 ah_k 속성값이 실시간 검색어를 의미하는 속성값인 것 같으므로 select를 이용해서 한번 더 세분화 하기로 하였다.

rank = soup.select(' .PM_CL_realtimeKeyword_rolling span[class= ah_k]')

인터넷을 뒤져보니 select문을 세분화 할때 두개의 조건이 가능하다는 것을 알았다.

그래서 우리는 PM_CL_real~~~안에 있는 span class="ah_k"를 기준으로 다시 한번 나누기로 했다. 이렇게 나누게 되면

아까보다 훨씬 더 깔끔해졌다.

하지만 앞에 있는 <span class="ah_k">가 너무 보기가 싫었다.

그래서 앞에 있는 태그들을 다 지워버리고 값만 가져오기 우해 enumerate 함수를 사용하기로 했다.

enumerate 함수란?

enumerate란 "열가하다"란 뜻으로 순서가 있는 자료형을 입력 받아 인덱스 값을 포함하는 enumerate 객체로 돌려주는 함수라고 한다.(출처: 위키독스(https://wikidocs.net/32#enumerate)

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

주로 for문과 같이 쓰인다.

일단 설명은 쓰고 있는 나도 이해가 안되니 코드로 설명하도록 하겠다.

for i, out in enumerate(rank,1) : print(i, out.text)

...더보기

i = 숫자(순위)를 출력해줄 변수

out = 태그를 제외한 결과값만 출력하기 위한 변수

rank = 현재 태그+출력값이 있는 더러운 코드

1 = 순위가 1위부터 시작하게 하기 위해 1로 저장

print(i,b.text)

i =1부터 차례대로 출력

b.text = for문이 돌 때마다 태그가 지워지고 순수 결과값만 나오게 출력

이렇게 입력하고 나면

다음과 같이 현재 실시간 검색어 순위를 깔끔하게 출력해준다.

-끝-

먼가 이렇게 깔끔하게 나오니까 정말 좋은 것 같다.

 

반응형