본문 바로가기
코드리뷰/chatGPT(Python)코드

웹 크롤링 기초 - selenium 네이버 접속하기

by 디마드 2024. 3. 23.

동적인 웹 페이지, 즉 자바스크립트로 구성된 페이지는 일반적인(requests이용한) 크롤링을 통해 가져오기 어렵다. selenium이 등장하면서 간편하게 구현할 수 있게 되었다. selenium 기초 설정을 알아보자. 

1. selenium 설치 : 별거없다. 아래 명령어 입력하고 엔터 치면 자동 설치된다. 

pip install selenium

2. 코드 작성

from selenium import webdriver
url = "https://naver.com"
driver = webdriver.Chrome()
driver.get(url)

selenium을 통한 네이버 접속 소스다. 이보다 간단할 순 없다. 

3. 코드 추가 (options 설정)

Options을 설정한다. 

(1) 프로그램 실행 시 웹 창을 최대화로 열기기

options.add_argument("--start-maximized")

(2) 헤더정보 설정

- 윈도우 PC 헤더 : naver.com으로 실행된다.

options.add_argument("User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36")

- 안드로이드 모바일 헤더 : 일반 url로 코딩을 해도 모바일 URL로 실행된다. .
options.add_argument("user-agent=Mozilla/5.0 (Linux; Android 13; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36")

(3) 브라우저 창 유지하기 : 화면이 자동으로 종료되지 않고 유지된다.  

options.add_experimental_option("detach",True)

(4) 로깅 및 안내 문자 제외하기 : 디버그 화면 에러 로그와 브라우저 크롤링 안내 페이지를 없애준다. 
options.add_experimental_option("excludeSwitches",["enable-logging","enable-automation"])

주의할 점은 excludeSwitches 값들은 list인데, 최종 설정값을 따른다. 그래서 이걸 각각 설정하면 excludeSwitches 는 최종값이 된다. 아래와 같이 코딩하면 enable-logging이 설정되지 않는다. 반드시 리스트에 포함하여 하나로 설정하자.

 options.add_experimental_option("excludeSwitches",["enable-logging"])
 options.add_experimental_option("excludeSwitches",["enable-automation"])

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

url = "https://naver.com"

options = Options()
options.add_argument("--start-maximized")
options.add_argument("User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36")
options.add_experimental_option("detach",True)
options.add_experimental_option("excludeSwitches",["enable-logging","enable-automation"])

driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(3)
driver.close()

 

반응형

댓글