본문 바로가기
Python/Python_Crawling

셀레니움(Selenium) 기본예제 : naver view 특정글 위치

by Mr.DonyStark 2023. 12. 13.

□ 목표 : 특정 키워드에 대한 특정 view 글의 위치(순서)를 조회/출력

 필요사항

 ○ 조회 출력하고자하는 view 글의 a태그 링크

 ○ 위 a태그 링크를 포함한 부모태그 값 게시글별 패턴 확인

 ○ 자동 스크롤기능 → 조회하고자하는 글이 없을시 자동으로 스크롤하여 내려가기 위함임

 ※ naver view는 기본 디폴트로 30개씩 게시글을 보여줌 없다면 스크롤을 해야하며, 스크롤시 자동으로 다음 글이 보여짐

#셀레니움 창 생성을 위한 라이브러리 호출 실행
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

#검색키워드
taget_keyword = input('검색하고자하는 키워드를 입력해주세요\t:\t')

#chromedriver_autoinstaller.install() 최초 설치시에만 사용
driver = webdriver.Chrome()
#PC화면에 맞춰 최대사이즈로 실행
driver.maximize_window()
#타겟링크로 이동 후 2초 대기
search_link = f'https://search.naver.com/search.naver?sm=tab_hty.top&where=view&query={taget_keyword}' #검색키워드가 담긴 변수에 해당하는 검색결과화면으로 이동
driver.get(search_link)
time.sleep(2)

rank_one_link = 'https://blog.naver.com/gnu_jobs/223290292759'
link_selector = f'a[href^="{rank_one_link}"]' #rank_one_link를 포함한 a태그

#아래 행위를 10번이내 반복 반복
BLOG_FOUND = False
for i in range(10):
    #예외처리
    try:
        rank_one_link_element = driver.find_element(By.CSS_SELECTOR, link_selector) #위에서 지정한 특정 a태그를 검색

        #진행여부 중간확인
        print('현재 포인트까지 이상없음--25줄')

        # 위 타겟으로하는 태그를 포함한 부모태그로 이동방법(By.XPATH, "상위 단계")
        #.현재위치
        #..한단계위
        while True:
            parent_element = rank_one_link_element.find_element(By.XPATH, './..')  #반복문을 통해 한단계씩 위로올라가 해당 층에서 data-cr-rank가 포함되어있는지 여부를 검색
            now_level = parent_element.get_attribute('data-cr-rank')
            if now_level is not None:
                print(f'data-cr-rank {now_level} 에서 링크가 포함된 계층을 찾음')
                BLOG_FOUND = True
                break
            print(f'조회가 안되어 스크롤 진행')
            rank_one_link_element = parent_element
        print(f'{taget_keyword}는 {now_level} 순서에 위치합니다.')
        if BLOG_FOUND:
            break
    except:
        print('타겟블로그를 못찾음 → 스크롤 진행')
        driver.execute_script('window.scrollBy(0,10000);')   #자동 스크롤
        time.sleep(3)
#작업완료후 자동 닫힘
driver.quit()

input()