본문 바로가기

BLOG/웹크롤링

[웹크롤링] 네이버 - 연관 검색어 크롤링하기 (requests 사용)

 

네이버에서 원하는 검색어를 입력하면 아래 이미지처럼 홈페이지 맨 하단에 연관 검색어가 나오는데요,

이 연관 검색어를 크롤링해서 저장하는 방법에 대해서 살펴보도록 하겠습니다.

(requests를 사용한다는 가정하에 설명드리겠습니다. 크롬 드라이버를 사용한 방법은 다음 글에서 설명드리겠습니다.)

 

 

1. 필요한 라이브러리 import 하기

 

from bs4 import BeautifulSoup     
import requests

 

필요한 라이브러리로 BeautifulSoup, requests를 import 해주었습니다.

 

 

2. 키워드 입력받고 url, params 설정하기

 

keyword = input("연관검색어를 찾을 키워드를 입력하세요 : ")

url = "https://search.naver.com/search.naver?" 
params = {
    'where' : 'nexearch',
    'fbm' : '1',
    'query' : keyword
}

 

먼저, input() 함수를 이용하여 키워드를 입력받도록 해주었고, 이를 keyword 라는 변수에 저장하도록 했습니다.

그리고나서, 검색어를 입력했을 때의 기본 페이지 주소를 url에 저장한 뒤,

자세한 주소 값에 대해서는 params에 딕셔너리 형태로 저장해주었습니다.

(이 부분에 대해서는 이전 글을 참고하시기 바랍니다.)

 

 

3. 해당 페이지 html 가져오기

 

resp = requests.get(url,params)
soup = BeautifulSoup(resp.content, 'lxml')

 

그다음, 페이지를 여는 requests.get() 함수에 url과 params를 인자로 넣어줍니다.

그리고 BeautifulSoup() 함수를 이용하여 해당 본문을 가져옵니다.

여기서 soup 라는 변수를 출력하면 해당 html이 출력된 것을 확인하실 수 있습니다.

 

 

4. 연관검색어 태그 찾기

 

content_list = soup.select(' div.tit ')

 

f12를 눌러서 연관검색어의 element를 찾으면 <div> 태그, 'tit' 라는 클래스명을 가지는 것을 알 수 있는데요, 이를 select() 함수를 이용해서 해당 텍스트가 포함된 태그를 가져옵니다.

아래는 '코로나19'라는 키워드를 검색한 뒤 해당 연관검색어를 저장한 content_list를 출력한 결과입니다.

 

[<div class="tit">코로나 라이브</div>,
 <div class="tit">코로나 백신</div>,
 <div class="tit">현재 코로나 단계</div>,
 <div class="tit">코로나 거리두기</div>,
 <div class="tit">코로나 단계</div>,
 <div class="tit">코로나 확진자</div>,
 <div class="tit">사회적 거리두기</div>,
 <div class="tit">코로나 2단계</div>,
 <div class="tit">거리두기</div>,
 <div class="tit">진주 코로나</div>]

 

위에 출력된 값을 보면 태그명과 함께 출력된 것을 확인할 수 있습니다.

 

 

5. 리스트에 텍스트만 저장하기

 

content = []
for i in content_list :
    content.append(i.string)

 

그다음, 위에서 추출한 content_list에서 데이터 하나씩 불러와서 string 모듈을 이용해서 텍스트만 추출하고, 새로운 리스트 content에 저장하는 코드입니다.

 

여기까지 다 입력 및 실행을 하고 리스트 content를 출력하면 아래와 같이 키워드에 대한 연관겁색어를 얻을 수 있답니다.

 

['코로나 라이브', '코로나 백신', '현재 코로나 단계', '코로나 거리두기', '코로나 단계', '코로나 확진자', '사회적 거리두기', '코로나 2단계', '거리두기', '진주 코로나']

 

 

 

전체 코드

코드를 종합하자면, 다음과 같은데요, 이번에는 키워드를 '한국'으로 입력한 뒤 연관검색어를 출력해보겠습니다.

 

from bs4 import BeautifulSoup     
import requests
import pandas as pd

keyword = input("연관검색어를 찾을 키워드를 입력하세요 : ")

url = "https://search.naver.com/search.naver?" 
params = {
    'where' : 'nexearch',
    'fbm' : '1',
    'query' : keyword
}

resp = requests.get(url,params)

soup = BeautifulSoup(resp.content, 'lxml')
content_list = soup.select(' div.tit ')

content = []
for i in content_list :
    content.append(i.string)

print(content)
# output :
연관검색어를 찾을 키워드를 입력하세요 : 한국
['아나필락시스', '혈전증', '시시포스', '종합부동산세', '제주 4·3 사건', '대상포진', '노랑해당화', '공황장애', '코로나바이러스감염증-19', '역류성식도염']

 

마찬가지로 해당 검색어에 대한 연관검색어가 잘 출력되는 것을 확인할 수 있습니다.