Python

[크롤링]네이버 실시간 검색어 크롤링 하기

과로사한 공돌이 2020. 11. 25. 18:00
728x90
반응형

 

과거 네이버 실시간 검색어 크롤링은 아래 사진의 창을 통해 크롤링을 했다. 그러나 이제는 이보다 더 편하게 크롤링 해 올 수 있다. 그러나 이제는 이 코드는 작동하지 않는다. 그래도 한번 설명하고 가는 편이 좋을듯하다.

네이버 메인 페이지 실시간 급상승 검색어

from bs4 import BeautifulSoup 
import requests 

def hot_keywords(): 
	url = "https://www.naver.com/" 
	res = requests.get(url).text 
	soup = BeautifulSoup(res, "html.parser") 
	Keys = soup.select("span.ah_k").text 
	
	index = 1 
	for key in Keys: 
		index += 1 
	    print(str(index) + ". " + key) 
	    if index >= 20: 
	    	break 

hot_keywords()
반응형

 

1. source = requests.get("http://www.naver.com/").text

위 코드의 source = requests.get().text 함수는 파라미터의 url 혹은 ip 주소를 통해 요청하여 웹페이지를 받아오고 그것을 text의 형식으로 source에 넣는다.

 

2. soup = BeautifulSoup(source, "html.parser")

soup = BeautifulSoup(source, "html.parser")는 source를 "html.parser"를 통해 다듬는다(?)는 코드이다. 이럴 경우 html 문서를 BeautifulSoup이 프로세싱 하기 편하게 들여 쓰기나 여백인 줄을 지우는 프리 프로세싱을 한다.

 

3. Keys = soup.select("span.ah_k").text

Keys = soup.select("span.ah_k").text는 span 태그 중 ah_k라는 class 이름을 가진 모든 태그를 찾아가 내용을 리스트에 넣는다.

 

4. for

Keys 리스트의 요소들을 하나씩 출력한다.

 

그럼 현재 작동하는 코드는 아래 페이지를 크롤링 해 실시간 검색어를 크롤링 해온다.

네이버 datalab 급상승 검색어

그리고 윈도우의 경운 f12, 맥의 경우 option + commend + i 또는 fn + f12를 누르면 html 소스를 볼 수 있으며 우측 창의 좌측 상단의 아이콘을 클릭하면 다음과 같은 화면이 나오고 커서를 올려놓으면 해당 내용의 html tag를 찾아 보여준다.

개발자 옵션

그러면 위 코드를 그대로 응용하여 적용하면 된다. 그러나 이제는 몇 가지 더 필요한 것이 있다. 우선 header를 추가해 주어야 한다. header은 아래 것을 그래로 가져다 써도 무관하지만 자신의 header에 넣을 user agent를 보고 싶다면 이 링크를 가서 보면 된다. 그리고 나머지는 이전 코드와 변수 이름과 표현법만 조금 다를 뿐이다.

import requests 
from bs4 import BeautifulSoup 

def hot_keywords(): 
	headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Whale/2.8.105.22 Safari/537.36'} 
    url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main' 
    res = requests.get(url, headers = headers) 
    soup = BeautifulSoup(res.content, 'html.parser') 
    data = soup.select('span.item_title') 
    
    for i in range(20): 
    	print(str("%02d. " % (i + 1)) + data[i].get_text()) 
    return(hot_keywords) 
    
hot_keywords()

만약 자신의 코드가 작동하지 않는다면 에러 코드를 구글에 그래도 ctrl + c, ctrl + v를 해보면 많은 사람들이 똑같은 에러를 만났을 것이고 커뮤니티에 질문하고 답변을 받았을 것이다. 그걸 보고 해결하고 안된다면 stackoverflow 같은 커뮤니티에 질문한다면 많은 사람들이 친절하게 답변해 줄 것이다. 영어가 안된다며 facebook 생활코딩 같은 커뮤니티에 질문하는 것을 추천한다.

 

그리고 크롤링은 상업적이든 비상업적이든 이용이 불가능하다. 크롤링 정보를 서비스에 이용 시에는 네이버를 웹페이지가 아닌 법정에서 볼 수 있으니 조심해야 한다.

 

728x90
반응형