** 실습코드를 한줄한줄 보면서 fn+f12 를 누르면 나오는 개발자 도구의 elements 창에서 직접 요소들을 비교해보며 공부하면 도움이 될 것 같다**
chrome driver 설치 ( chrome 오른쪽위 ... --> 도움말 --> chrome 정보에서 버전 확인)
압축풀고 chrome driver.exe 파일을 VScode에서 작업할 폴더에 넣는다.
아래 코드는 네이버 검색창에 chat gpt 검색 -> 뉴스 탭 클릭 -> 뉴스 제목과 url을 자동으로 가져오는 과정을 코드로 구현해 놓은 것이다.
# 동적 페이지 웹 스크래핑 <- selenium
# 동적 페이지 : 요청한 URL에서 응답받은 HTML 안의
# JS를 실행해 HTML을 새로 만든 경우 (Client Side Rendering)
# Selenium
# - 인증을 요구하는 특정 웹 페이지의 데이터 스크랩
# - 무한 댓글 스크랩
# - 브라우저용 매크로로써 사용 가능
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By # 요소를 선택하기 위해 사용
import time
# 1. chrome 실행
# path = 'chromedriver.exe'
# service = webdriver.chrome.service.Service(path)
# driver = webdriver.Chrome(service=service)
driver = webdriver.Chrome()
# 2. 특정 url 접근
# driver.get('https://search.naver.com/search.naver?ssc=tab.news.all&where=news&sm=tab_jum&query=chat+gpt')
driver.get('https://naver.com')
time.sleep(1)
# 3. 검색 처리
search_box = driver.find_element(By.ID, "query")
search_box.send_keys("chat gpt") # 네이버 검색창에 chat gpt를 입력했던 것을 코드로 처리
search_box.send_keys(Keys.RETURN)
# 뉴스 탭 이동
# news_tab = driver.find_element(By.LINK_TEXT, "뉴스") # '뉴스' 탭 찾기
# news_tab.click() # 클릭 실행
news_btn = driver.find_element(By.XPATH, '//*[@id="lnb"]/div[1]/div/div[1]/div/div[1]/div[8]/a') # 안쪽에서 "를 쓰고 있기 때문에 ' 를 쓰는게 좋을 것 같다다
news_btn.click()
time.sleep(1)
# 4. 스크롤 처리
for _ in range(5):
body = driver.find_element(By.TAG_NAME, "body")
body.send_keys(Keys.END)
time.sleep(1)
# 5. 특정 요소에 접근
news_contents_elems = driver.find_elements(By.CSS_SELECTOR, ".news_contents")
print(len(news_contents_elems))
for news_contents_elem in news_contents_elems:
# print(news_contents_elem)
# print(type(news_contents_elem))
a_tag = news_contents_elem.find_element(By.CSS_SELECTOR, "a.news_tit")
title = a_tag.text
href = a_tag.get_attribute('href')
print(title, '|', href)
driver.quit()
'Web Crawling > Selenium' 카테고리의 다른 글
Selenium 이란 ? (0) | 2025.02.24 |
---|