본문 바로가기
language/python

[Python] 네이버 실시간 검색어 크롤러 만들기

by sseddi 2020. 9. 8.
728x90

먼저 웹 크롤러는 웹페이지의 자료들 중에 원하는 자료만 가공해 자동적으로 가져오는 것을 의미한다.

https://stackhoarder.com/2019/08/18/python%EB%B6%80%ED%84%B0-web-scraping-%EA%B9%8C%EC%A7%80-%EC%B5%9C%EB%8B%A8-%EC%8B%9C%EA%B0%84%EC%97%90-%EC%9D%B5%ED%98%80%EB%B3%B4%EC%9E%90/

본격적으로 파이썬으로 웹 크롤러를 만들기에 앞서 미리 해줘야하는 것들이 있는데,

사용할 모듈을 다운로드 받아야 한다.

 

웹 크롤러는 bs4 모듈과 requests 모듈이 필요하다.

아래 사이트를 참고해 다운로드 받았다.

shaeod.tistory.com/900

 

[라이브러리] 파이썬 pip로 BeautifulSoup 설치하기

※ 요약 파이썬으로 웹을 크롤링 하기 위한 필수 라이브러리 중 하나인 BeautifulSoup을 설치하는 방법을 알아보도록 하겠다. 설치는 pip을 통해 할 것이며, 특정 버전을 원하는 독자는 해당 버전을

shaeod.tistory.com

bs4 모듈은 html파일을 가져올 때 사용하고, requests 모듈은 웹에 있는 소스를 가져올 때 사용한다.

 

관련 예제는 아래 사이트를 참고하면 된다.

twpower.github.io/84-how-to-use-beautiful-soup

 

[Python] 웹 크롤링에 사용하는 Beautiful Soup(뷰티플 수프) 사용법과 예제

Practice makes perfect!

twpower.github.io

모듈을 다운받은 후 이제 네이버 실시간 검색어 크롤링을 하려는데,

 

( //주의 // 아래 내용부터는 구글링해서 찾은 코드를 해석한내용이다. )

 

구글링 해보면 네이버 사이트 들어가서 F12 누르고 실시간 검색어의 태그와 클래스를 찾는 방법이 많았다.

근데 네이버에 들어가면

 

이렇게 검색어가 안뜨고 검색어 필터 설정을 개인이 해서 사용자 맞춤 실시간 검색어를 제공하고 있었다.

그래서 기존 크롤링 방법이 아닌 다른 방법으로 해야할 것 같아 더 찾아보았다.

 

관련해서 구글링 해 본 결과 인프런 QnA에 해결법이 나와있었다.

www.inflearn.com/questions/22012

 

네이버 검색 순위 크롤링 관련 - 인프런

질문 - 네이버 검색 순위 크롤링 관련 lists의 사이즈가 0입니다. 제가 혹시 간과한 부분이 있는지 여쭙습니다. 참고로 status code는 200, bs 변수에도 정상적으로 값이 할당되는듯합니다. 감사합니다.

www.inflearn.com

위의 코드를 실행해보니 문제 없이 네이버 실시간 검색어가 크롤링 된 것을 확인할 수 있었다.

 

하지만 7번째 줄인

json = requests.get('https://www.naver.com/srchrank?frm=main').json()

부분이 잘 이해가 안갔다.

 

해당 링크로 들어가면 실시간 검색어가 나열되어 있었는데 어떻게 이 사이트를 알아낸 건지 알 수가 없었다. 

주석 설명처럼 데이터를 json 형태(키-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포맷)로 받아온 것 같은데

그래서 이렇게 뜨는가 보다

 

json.get("data")로 데이터 항목의 값만 추출해서 ranks에 넣고 

 

반복문 사용해서 순위랑 검색어를 가지고 print 해줘서 

이렇게 뜨는 것 같다 ..

그래도 100% 이해는 못해서 다른 방법을 더 찾아보았다.

 

그러다 찾은 방법은

1. 네이버 메인 홈페이지가 아닌 실시간 검색어를 관리하는 곳에서 크롤링 하기 

2. 유저 정보를 설정해 컴퓨터가 아니라 사람이라는 것을 알려주기 

 

두 가지 방법을 충족시켜 크롤링을 하는 것이다.

 

이렇게 모듈을 임포트 해주고 

 

유저 설정을 해줘야한다.

 

이 유저 설정은 사람이라는 것을 알려줄 수 있는 것인데 

headers(접속하는 사람/ 프로그램에 대한 정보를 가지고 있는 부분) 정보에 User-Agent를 넣어주면 사람이라는 것을 나타낸다.

유저정보는 얻을 수 있는 사이트가 있다고 하는데 맨 아래 링크를 참고해 작성하였다.

 

 

 

url은 네이버 메인 홈페이지가 아닌 실시간 검색어를 관리하는 DataLab 사이트를 연결했다.

 

그리고 응답 객체인 res에 내가 준 url(네이버 DataLab 사이트)과 파라미터(headers)를 requests 모듈을 엮었다.

 

일련의 문자열만 가지고는 원하는 데이터를 이쁘게 가지고 올 수 없기 때문에 BeautifulSoup을 이용한다.

위에서 요청해서 받은 res를 사용하는데 이때 주의점은  뒤에 content를 붙여주어야 한다. 

content는 응답 데이터를 바이트로 리턴하는 속성이라고 하는데 아마 res가 응답 객체여서 붙여줘야되는 것 같다.

BeautifulSoup을 통해 soup이라는 객체로 저장을 한다.

 

그리고 데이터 변수를 만드는데

soup 변수 내부에서 span 메타의 item_title 클래스를 가지고 있는 문자열들을 다 select 해서 가지고 온다.

span메타와 item_title 클래스를 가지고 오는 이유는

빨간 줄 친 부분을 보면 

검색어 1위와 2위 모두 공통적으로 span과 item_title을 가지고 있는 것을 볼 수 있다.

이는 실시간 검색어가 가지고 있는 메타 태그와 클래스이다.

 

마지막으로  반복문을 사용해 실시간 검색어를 출력해주면 된다.

 

총 코드는 아래와 같다.

 

실행화면

잘 작동이 되었다.

 

참고) 

예전 크롤링 방법

blockdmask.tistory.com/385

 

[python] 파이썬 크롤링 (네이버 실시간 검색어)

안녕하세요. BlockDMask 입니다. 오늘은 파이썬을 가지고 네이버 실시간 검색어를 크롤링 해보려 합니다. 파이썬은 웹 크롤링을 위한 모듈들이 이미 존재하더군요. 네이버에 따로 API들을 검색해 �

blockdmask.tistory.com

새로운 크롤링 방법

code-nen.tistory.com/111

 

Python 네이버 실검 크롤링

네이버 실시간 검색어를 크롤링 해보자! 하고 해보고 있는데... beautifulsoup 라이브러리를 다운받은 후 bs4가 없기 때문에 터미널 창에 ->pip install bs4 를 사용하여 다운 받았다. 이제 한번 써보자! spa

code-nen.tistory.com

jaeho0613.tistory.com/112

 

[Python Crawling] - 네이버 실검 크롤링 #1

현재 네이버 실시간 검색어 크롤링 방법이 달라졌다. 유튜브, 블로그 등에 많은 예제가 있지만 현재는 네이버 실시간 검색어가 동적으로 정보를 받게 바뀌어서 기존 예제들로 실시간 검색어를 �

jaeho0613.tistory.com

용어 정리

blog.naver.com/kiddwannabe/221177292446

 

코.알.못. 마케터도 크롤링하기#4. BeautifulSoup으로 정보가져오기

html 구조를 살펴보았다면, 이제는 실제로 html 내의 정보를 가져와야겠죠?​BeautifulSoup 이란 것을 사...

blog.naver.com

파이썬 requests 모듈 정리

dgkim5360.tistory.com/entry/python-requests

 

Python requests 모듈 간단 정리

Python에서 HTTP 요청을 보내는 모듈인 requests를 간단하게 정리하고자 한다. 0. 기본적인 사용 방법 import requests URL = 'http://www.tistory.com' response = requests.get(URL) response.status_code respo..

dgkim5360.tistory.com

 

728x90

댓글