본문 바로가기
python

[selenium] 웹사이트에서 데이터 긁어오기 - 실시간 검색어편

by 포 키 2023. 8. 8.
728x90

이전에 이미지를 다운받을 수 있도록 코드를 짜는 것을 해봤으면, 이번엔 실시간 검색어 자체를 가져오는 것을 해보자

이미지 다운에 관련해서 궁금하다면 아래 링크로 들어가보면 된다.

2023.08.08 - [python] - [selenium] 웹사이트에서 데이터 긁어오기 - 이미지편

 

[selenium] 웹사이트에서 데이터 긁어오기 - 이미지편

오늘은 셀레니움을 이용해서 웹 사이트에서 사진을 다운받아오는 과정에 대해 작성한다. 이미지 분석에 사용할 수 있도록 예제코드를 배운 셈으로 생각보다 간단했다. 나는 주피터노트북 가상

forky-develop.tistory.com

 

1. 시그널 실시간 검색어 뽑아내기

시그널의 경우 실시간 검색어가 바로 top 10으로 보인다.

그래서 따로 페이지 로딩시간을 체크해서 기다리는 시간을 주는 일을 하지 않아도 된다.

 

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

CHROME_DRIVER_PATH = './driver/chromedriver.exe'
service = Service(executable_path=CHROME_DRIVER_PATH)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

URL='https://signal.bz/news'
driver.get(url=URL)
results = driver.find_elements(By.CSS_SELECTOR, "#app > div > main > div > section > div > section > section:nth-child(2) > div:nth-child(2) > div > div > div > a > span.rank-text")
results

keyword_list = []
for keyword in results:
    keyword_list.append(keyword.text)
keyword_list

 

 

2. nate 실시간 검색어 뽑아내기

nate가 조금 하드하다.

실시간 검색어 창을 좁게 만들어 한번에 5개씩만 보인다.

그래서 바뀌는 타이밍을 정해서 변경해야하고, 네이트에서 처음에 크롤링 시작한 검색어가 6위부터면 순서가 약간 섞이게 되는 일도 발생한다.

 

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

CHROME_DRIVER_PATH = './driver/chromedriver.exe'
service = Service(executable_path=CHROME_DRIVER_PATH)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

URL='https://www.nate.com/'
driver.get(url=URL)

nate_list_1st = []
nate_list_2nd = []
for i in range(2):
    URL='https://www.nate.com'
    driver.get(url=URL) 
    rank_results = driver.find_elements(By.CSS_SELECTOR,'#olLiveIssueKeyword > li > span.num_rank')
    nate_results = driver.find_elements(By.CSS_SELECTOR,'#olLiveIssueKeyword > li > a > span.txt_rank')
    for rank, keyword in zip(rank_results, nate_results):
        if i == 0:
            nate_list_1st.append(f'{rank.text}_{keyword.text}')
        elif i == 1:
            nate_list_2nd.append(f'{rank.text}_{keyword.text}')
    time.sleep(5)
    driver.refresh()
result = nate_list_1st + nate_list_2nd

print(result)
driver.quit()

 

 

이렇게 하면 완료!

여기서 가장 중요하게 봐야할 것은 elements 부분을 어디서 추출해오냐 였다.

페이지 검사를 눌러 마우스버튼으로 필요한 구간을 클릭해 나타나는 블럭부분을 활용하는것을 꼭 알아두자

728x90