본문 바로가기

프로젝트 목록/ParseWEB

ParseWEB [1-1] 네이버 실시간 검색어 파싱

사전 정보 수집

네이버 실시간 검색어의 경우 네이버 메인 홈페이지에서 보는 것이 가능하므로 네이버 메인 홈페이지 소스를 보고 어느 부분에 실시간 검색어가 들어가 있는지 확인하여 그 부분의 데이터를 가져오는 방식으로 구현하려 한다.


먼저 크롬을 통해 네이버 메인 홈페이지로 이동한 다음 F12를 이용해서 개발자 도구를 켠다. 현재 실시간 검색어 1위에 해당하는 키워드를 Elements 탭에서 검색한다.

포스팅 작성 기준으로 보면 황교익이 1위로 되어 있으므로 "황교익"으로 검색한다. 그러면 아래와 같이 해당 검색어가 표시가 되는 것을 볼 수 있다.


해당 검색어를 포함하는 태그는 span이고 속성은 classah_k가 할당된 것을 볼 수 있다. 그래서 span.ah_k로 검색을 해보면 총 41개의 태그가 검색되는 것을 볼 수 있다.


해당 태그의 내용을 보면 1위의 내용은 3개가 중복이고, 2위에서 20위까지의 내용은 2개씩 중복인 것을 확인할 수 있었다.


중복을 줄이기 위해서 실시간 검색어의 정보를 하나씩만 가지고 있는 부모 노드를 찾는 것으로 목표를 설정하였다. 그러면 해당 부모 노드 내에서 검색을 하면 중복되지 않고 1개씩만 나올 수 있기 때문이다.

20개의 원소를 포함하는 공통된 부모 노드를 확인한 결과 태그는 div이고 속성은 classah_list가 할당된 것을 확인할 수 있었다. 그래서 div.ah_list span.ah_k로 검색을 하면 총 20개의 태그가 검색되는 것을 볼 수 있다.


이 정보를 통해서 div.ah_list span.ah_k에 해당하는 태그에서 텍스트 값을 읽으면 1위부터 20위까지의 실시간 검색어를 얻을 수 있다는 것을 알 수 있었다.

구현하기

from bs4 import BeautifulSoup
import requests

def get_content():
    req = requests.get('https://www.naver.com/')
    content = req.content

    soup = BeautifulSoup(content, 'html.parser')
    elements = soup.find('div', class_='ah_list').find_all('span', class_='ah_k')

    return list(map(lambda x: x.text, elements))

print(get_content())

시연 결과

아래 이미지와 같이 네이버의 실시간 검색어를 잘 가지고 오는 것을 확인할 수 있다.


  • 선이 2019.09.02 10:14 댓글주소 수정/삭제 댓글쓰기

    저는 [u'\uc720\uba85\ub2f9\uad6c\uc120\uc218', u'\ub2f9\uad6c\uc120\uc218', u'\uc774\uc120\ud638', u'\uc774\ub798\ub098', u'\uc774\ub2e4\ud76c \uc544\ub098\uc6b4\uc11c', u'\ubc31\ud604\ubbf8', u'\ud504\ub85c\ub2f9\uad6c\uc120\uc218', u'\ud1a0\ud2b8\ub118 \uc544\uc2a4\ub0a0', u'\ucd95\uc11c\ub2e8', u'\ud638\ud154 \ub378\ub8e8\ub098 \uacb0\ub9d0', u'\ubc95\ub300\ub85c\uc870\uad6d\uc784\uba85', u'\ub178\uc608\ub9bc', u'\ubcf4\ud1b5\uc0ac\ub78c', u'\uac15\uc9c0\ud658', u'\uae40\uc218\ud604', u'cj', u'\ubc31\ud604\uc219', u'\ud638\ud154 \ube14\ub8e8\ubb38', u'\ubc31\ud604\uc8fc', u'\uc774\uc7ac\ud604']

    이런식으로 불러오는데 혹시 왜그런건가요 ㅠㅠ?

  • 선이 2019.09.02 10:24 댓글주소 수정/삭제 댓글쓰기

    현재 python 2.7.8 버전 사용중입니다.
    가장 최근거로 사용하면 될까요?