본문 바로가기

프로젝트 목록/ParseWEB

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

사전 정보 수집

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


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

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


하지만 Sources 창에서 해당 내용을 검색한 결과 해당 내용이 나오지 않는 것을 알 수 있었다.


이를 통해서 네이트의 경우 실시간 검색어에 해당하는 값을 동적으로 받아와서 출력해주는 것이라고 예상을 할 수 있다.

동적으로 받아오는 것을 확인하기 위해서 Network 탭에서 xhr에 해당하는 값들만 필터링하여 확인해본 결과 LiveKeyword라는 의심이 가는 요청이 보내진 것을 확인할 수 있었다.


해당 요청에 대한 응답을 확인한 결과 자바스크립트의 형태로 실시간 검색어를 받아온다는 것을 확인할 수 있었다. 추가로 callback이라는 값을 받는 것을 통해 jsonp의 형태로 데이터를 가지고 온다는 사실을 추측할 수 있었다.


그래서 해당 개체의 값을 가져오는 방식으로 해서 실시간 검색어의 데이터를 가지고 올 수 있었다.

구현하기

import requests
import json

def get_content():
    req = requests.post('https://www.nate.com/nate/LiveKeyword')
    content = req.content

    content = content[:content.rfind(b'\'')]
    content = content[content.find(b'\'')+1:]

    return list(map(lambda x: x[1], json.loads(content.decode('euc-kr'))))

print(get_content())

시연 결과

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