□ 목표 : 특정 키워드에 대한 특정 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()
'Python > Python_Crawling' 카테고리의 다른 글
크롤링 예제 1 (0) | 2023.12.19 |
---|---|
셀레니움(Selenium) 기본예제 : naver 쇼핑 특정상품 위치 (0) | 2023.12.14 |
셀레니움(Selenium) 기본기능 (0) | 2023.12.12 |
셀레니움(Selenium) (0) | 2023.12.11 |
파이썬 개발환경세팅 : 가상환경(Virtual Environments) (0) | 2023.12.11 |