본문 바로가기

개발일지

네이버 검색어 세션 순서 크롤링 프로그램 개발일지

안녕하세요

오늘은 네이버 세션 순서를 크롤링하는 프로그램을 개발해볼려고합니다

바로 시작!

 

1. 세션순서란

네이버에 컴퓨터 추천 이라는 검색어로 검색했을때 결과입니다

컴퓨터 추천검색어는 VIEW -> 네이버 쇼핑 -> 지식iN -> 플레이스 -> 네이버 책 -> 이미지

순으로 세션이 표시가 됩니다

 

우리는 이걸 지식인 이나 VIEW세션이 최상단(맨 위)에 올라와 있는

키워드를 찾아 저장하는 프로그램을 제작해보도록 하겠습니다

네이버 세션 설명

2. 작업환경 설정

지금까지 selenium을 사용해 왔습니다

셀레늄을 사용한 가장 큰 이유는 사이트에 과부화를 주지 않으면서

서버가 요구하는 값들을 정상적으로 출력하기 위함입니다

 

이번에는 requests를 이용해보고 requests가 되지 않으면

셀레늄으로 개발하는 방식으로 하겠습니다

requests를 이용하면 장점이 크게 늘어납니다

첫번째로 멀티프로세싱을 이용할수 있습니다

두번째로는 속도가 셀레늄보다 빨라 시간 절약을 할수 있습니다

 

그럼 주피터 파일을 만들고 vscode를 켜서 작업을 시작해보겠습니다

 

3. 네이버 검색 결과 받아오기

requests를 이용해서 네이버 검색 결과가 정상적으로 받아오는지 확인해보겠습니다

필요한 모듈을 먼저 import합니다

from bs4 import BeautifulSoup
import time
import requests
import random
import multiprocessing

html 코드를 분석할수 있는 beatifulsoup,

대기 시간을 조절하기 위한 time,

서버와 소통할수 있는 requests,

대기 시간을 랜덤으로 하기 위한 random,

마지막으로 멀티프로세싱을 위한 multiprocessing을 추가해줍니다

 

requests 출력 결과

이렇게 requests가 잘 출력해주는것을 확인했으니 우리는 requests를 사용하면 됩니다

 

4. 세션 타이틀 HTML 코드 분석

세션 타이틀 분석

세션 타이트를 분석해보면 모든 세션이 api_title이라는 클래스명을 가지고 있습니다

우리는 수프에서 select를 통해 api_title를 선택해주면 됩니다

select를 결과 출력

html = requests.get('https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%BB%B4%ED%93%A8%ED%84%B0+%EC%B6%94%EC%B2%9C&oquery=%EC%BA%90%EB%A1%A4&tqi=U%2BRlssprvh8ssReKUmlssssst70-471618').text
soup = BeautifulSoup(html, 'html.parser')
for li in soup.select('.api_title'):
    print(li.text)
    

위와 같이 네이버쇼핑, 네이버책을 제외 한 나머지 세션 제목은 정상적으로 출력되는 걸 확인할수 있습니다

왜 이런 결과가 나오는지 분석해보면

<h2 class="api_title">네이버 책<div class="api_title_inner _tooltip"> <a aria-pressed="false" class="api_link_help _btn_toggle" href="#" onclick="return goOtherTCR(this,'a=bok_2nd.info&amp;r=0&amp;i=');" role="button"><i class="spnew api_ico_alert">이 정보가 표시된 이유</i></a> <div class="ly_api_info"> <p class="dsc">네이버가 운영하는 책 서비스입니다.</p> <button class="btn_close _btn_close" type="button"><i class="spnew ico_close">정보확인 레이어 닫기</i></button> </div> </div> </h2>

우리가 선택한 h2 태그안에 다른 text값이 있어 함께 출력이 되는것을 확인합니다

간단한 조건문을 사용해서 정상적으로 출력하게 하겠습니다

조건문 출력 결과

이렇게 간단한 조건문으로 원하는 결과를 얻어 왔습니다

우린 연관 검색어는 필요없으니 삭제해주도록 하겠습니다

이것도 마찬가지로 간단한 조건문을 사용해서 제거하겠습니다

for li in soup.select('.api_title'):
    out = li.text
    if '네이버 책' in out:
        out = '네이버 책'
    elif '네이버쇼핑' in out:
        out = '네이버쇼핑'
    elif '연관' in out:
        continue
    print(out)

이렇게 우리가 원하는 결과를 얻었습니다

우리는 이제 키워드를 받아 멀티프로세싱을 진행하면 됩니다

 

5. 멀티프로세싱 작업

멀티프로세싱은 리스트를 형태로 진행 할수 있습니다

검색할 키워드를 리스트 형태로 담으면 됩니다

추가로 멀티프로세싱 작업할 동작을 함수로 만들어 주면 됩니다

멀티프로세싱 작업 결과

위 결과는 processes 2개 결과 입니다

파이썬 프로그램을 2개 실행시킨 속도라 보시면 됩니다

우리는 이제 크롤링한 데이터를 csv파일로 저장해서 보기 쉽게 정리하면 됩니다

 

다음시간에는 키워드를 크롤링해서

네이버 세션에 적용하는 방법, csv파일로 저장하는 프로그램을 제작해보겠습니다

 

끝.