안 쓰던 블로그

[파이썬] beautifulsoup로 2020년 네이버 실시간 검색어 크롤링 하기 본문

언어/파이썬

[파이썬] beautifulsoup로 2020년 네이버 실시간 검색어 크롤링 하기

proqk 2020. 9. 1. 22:55
반응형

파이썬 크롤링 시리즈

네이버 웹툰 이미지 크롤링, 저장하기: foxtrotin.tistory.com/173

셀레니움으로 웹 게임 자동 매크로 만들기: foxtrotin.tistory.com/179

네이버 실시간 검색어 가져오기: 현재글

네이버 웹툰 요일별 크롤링: foxtrotin.tistory.com/328


2020년 1월부터 네이버 실시간 검색어가 ajax통신 방식을 이용한 동적으로 바뀌면서 많은 블로그에서 했던 방식인 span.ah_k으로는 아무 값도 받아지지 않는다

 

현재 네이버 실시간 검색어를 크롤링하는 방법은 두 개가 있다

 

1. 데이터랩에서 크롤링

2. 데이터를 json형태로 받아와서 크롤링

 

이 글에서 두 가지를 다 다뤄볼 것이다

 

아래 크롤링 코드를 실행하기 위해서는 크롬 드라이버가 필요하다
foxtrotin.tistory.com/179
여기에서 설치 방법을 확인할 수 있다

 

1. 데이터랩에서 크롤링

datalab.naver.com/keyword/realtimeList.naver?where=main

네이버 데이터랩에 접속해서 태그를 확인한다

 

메타 태그 span class는 item_title

from bs4 import BeautifulSoup
from selenium import webdriver
import urllib.request

driver = webdriver.Chrome('chromedriver_win32\\chromedriver.exe')
driver.get("https://datalab.naver.com/keyword/realtimeList.naver?where=main")
html=driver.page_source
soup = BeautifulSoup(html, "html.parser")

index=0
def getkeyword():
    keywords=soup.select("span.item_title")
    print(keywords)    
    
getkeyword()

일단 select로 데이터를 가져와서 print해 본다

아래처럼 나오면 정상이다

 

 

이제 이 값을 get_text를 써서 이쁘게 나눠주기만 하면 된다

 

전체 코드

from bs4 import BeautifulSoup
from selenium import webdriver
import urllib.request

driver = webdriver.Chrome('chromedriver_win32\\chromedriver.exe')
driver.get("https://datalab.naver.com/keyword/realtimeList.naver?where=main")
html=driver.page_source
soup = BeautifulSoup(html, "html.parser")

def getkeyword():
    keywords=soup.select("span.item_title")
    #print(keywords)
    index=1
    for key in keywords:
        data = str(index)+". "+key.get_text()
        print(data)
        index+=1

getkeyword()

 

2. 데이터를 json형태로 받아와서 크롤링

이곳을 참고했다 www.inflearn.com/questions/22012

from bs4 import BeautifulSoup
import requests

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

ranks = json.get("data")
print(ranks)

www.naver.com/srchrank?frm=main 이 주소가 메인페이지 내부에서 호출되는 실시간 검색어 데이터를 넘겨주는 주소다

그래서 이 주소를 가지고 .json()을 하면 데이터가 json형태로 넘어온다

 

json데이터에서 data 항목 값을 전부 가져와서 출력한다

 

이제 리스트를 돌면서 이쁘게 출력한다

전체코드

from bs4 import BeautifulSoup
import requests

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

ranks = json.get("data")
#print(ranks)

for key in ranks:
    rank = key.get("rank")
    keyword = key.get("keyword")
    print(rank, keyword)

 

위에랑 같은 결과가 나옴을 볼 수 있다

반응형
Comments