본문 바로가기
NLP

[NLP] Web Crawling, Selenium

by 단깅수 2024. 6. 28.
728x90

Dynamic Web Page

  • 정적 웹페이지
    • 서버에 미리 저장된 파일(HTML, JavaScript 등)이 그대로 전달되는 웹페이지
    • 보여지는 화면이 바뀌지 않음
    • Client가 요청하면 페이지를 그대로 전송 (응답)
    • 누가, 언제 접속해도 동일한 내용을 보여줌 (서버에 저장된 데이터가 변경되지 않는다는 가정)
  • 동적 웹페이지
    • 서버에 있는 데이터를 스크립트에 의해 가공하여 전달하는 웹페이지
    • 보여지는 화면이 계속 바뀜
    • Client의 요청을 해석하여 데이터를 가공해 전송 (응답)
    • 누가, 언제 접속하느냐에 따라 다른 내용을 보여줌

Selenium을 활용한 동적 웹페이지 Crawling

<예시 > Selenium 패키지로 재벌집 막내아들 75화의 댓글 긁어오기

## Selenium 패키지 Import
from selenium import webdriver

## webdriver 불러오기
driver = webdriver.Chrome('D:\MyWorkspace\chromedriver.exe')

## 페이지 로드를 위해 기다리는 시간
driver.implicitly_wait(3)

## scraping하려는 웹페이지 주소를 get()에 전달
url = 'https://comic.naver.com/webtoon/detail?titleId=800770&no=75'
driver.get(url)
## 태그를 탐색할 수 있는 Selenium의 By 모듈 import
from selenium.webdriver.common.by import By

## html 태그 중 Class 이름이 u_cbox_contents 인 부분 탐색
tmp = driver.find_elements(By.CLASS_NAME, 'u_cbox_contents')

## 출력
results = []
for x in tmp:
    results.append(x.text)
    
print(results)

위 코드의 출력


Selenium 패키지의 다양한 기능

1) 화면 클릭하기

## 전체댓글 보기 버튼 클릭
more_reply = driver.find_element(By.ID, 'cbox_module_wai_u_cbox_sort_option_tab2')
more_reply.click()

## BEST댓글 보기 버튼 클릭
best_reply = driver.find_element(By.ID, 'cbox_module_wai_u_cbox_sort_option_tab1')
best_reply.click()

print(more_reply.text)
print(best_reply.text)

위 코드의 출력
BEST댓글 vs 전체댓글

2) 키 입력하기

driver = webdriver.Chrome('D:\MyWorkspace\chromedriver.exe')

# 페이지 로드를 위해 기다리는 시간
driver.implicitly_wait(3)

# scraping하려는 웹페이지 주소를 get()에 전달
url = 'https://www.google.com'
driver.get(url)

## 검색 창에 해당하는 요소를 찾는다 (By XPATH)
search_box = driver.find_element(By.XPATH, '//*[@id="APjFqb"]')

## 검색창에 원하는 검색어를 입력한다
search_box.send_keys('챗GPT')

from selenium.webdriver.common.keys import Keys
search_box.send_keys(Keys.RETURN)

 

728x90