0. 이 글은 무엇을 위한 글인가요?
- requests로는 안 보이던 데이터를 크롤링하고 싶은 분
- 자바스크립트로 로딩되는 웹페이지도 수집하고 싶은 분
- Selenium으로 브라우저 자동 제어를 해보고 싶은 분
Selenium은 사람처럼 웹사이트를 조작하며 데이터를 수집할 수 있는 도구입니다.
1. Selenium이란?
- 웹 브라우저를 자동으로 실행하고, 검색하고, 클릭할 수 있는 도구
- 무한 스크롤, 로그인 필요, 동적 콘텐츠 크롤링에 적합
2. 설치 및 준비
2-1. 패키지 설치
pip install selenium
2-2. ChromeDriver 설치
- 크롬 주소창에
chrome://settings/help
입력하여 버전 확인 - 아래 사이트에서 같은 버전의 ChromeDriver 다운로드
https://chromedriver.chromium.org/downloads - 압축을 풀고
chromedriver.exe
를 파이썬 파일과 같은 폴더에 두기
3. 기본 코드 흐름
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 브라우저 실행
driver = webdriver.Chrome()
driver.get('https://news.naver.com/')
time.sleep(2) # 페이지 로딩 대기
# 뉴스 블록들 모두 찾기
news_blocks = driver.find_elements(By.CSS_SELECTOR, 'div.comp_news_feed')
# 제목+링크 저장용 리스트
titles = []
# 각 뉴스 블록에서 메인 뉴스 + 하위 뉴스 추출
for block in news_blocks:
try:
# 메인 뉴스 제목과 링크
main_tag = block.find_element(By.CSS_SELECTOR, 'a.cnf_news_area')
main_title = block.find_element(By.CSS_SELECTOR, 'strong.cnf_news_title').text.strip()
main_link = main_tag.get_attribute('href')
titles.append((main_title, main_link))
except:
pass
try:
# 하위 뉴스들
sub_tags = block.find_elements(By.CSS_SELECTOR, 'a.cnf_news')
for tag in sub_tags:
sub_title = tag.text.strip()
sub_link = tag.get_attribute('href')
if sub_title:
titles.append((sub_title, sub_link))
except:
pass
driver.quit()
4. 출력 예시
서울, 오늘 오후부터 눈…퇴근길 불편 우려
중국 ‘양회’ 개막…경제성장률 5% 유지할까
美·EU, 전기차·배터리 갈등 해소 노력
...
5. 크롤링한 데이터 DataFrame으로 정리
import pandas as pd
# 제목+링크로 리스트 생성
news_list = [{'제목': title, '링크': link} for title, link in titles]
# DataFrame 생성
df = pd.DataFrame(news_list)
print(df.head())
출력 예시
제목 링크
"고속도로에 타조가 뛰어다녀요"..소방당국, 마취총 쏴 포획 https://n.news.naver.com/article/660/0000081842
여수 시내 주행 중 람보르기니 불.."엔진룸에서 시작" https://n.news.naver.com/article/660/0000081854
...
6. 옵션 설정 (브라우저 안 띄우기)
Headless 모드 설정
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
7. 자주 쓰는 기능 요약
기능 | 코드 |
---|---|
웹 열기 | driver.get(url) |
요소 찾기 | find_element , find_elements |
텍스트 추출 | element.text.strip() |
링크 추출 | element.get_attribute('href') |
대기 | time.sleep(초) |
브라우저 종료 | driver.quit() |
8. 결과 저장하기
df.to_csv('selenium_뉴스.csv', index=False, encoding='utf-8-sig')
Excel에서 열어도 한글이 깨지지 않도록 utf-8-sig
사용합니다.
9. 마무리 요약
- Selenium은 실제 브라우저처럼 작동하며 동적 페이지도 수집 가능
- 자바스크립트로 생성되는 데이터도 접근 가능
- 입력, 클릭, 스크롤, 로그인 등 사람처럼 행동 가능
'Python' 카테고리의 다른 글
키워드 기반 뉴스 크롤링 자동화 프로젝트 (Selenium + BeautifulSoup) (0) | 2025.04.01 |
---|---|
여러 페이지 크롤링 자동화 - BeautifulSoup vs Selenium 완전 비교 (0) | 2025.03.31 |
Python으로 웹 크롤링 시작하기 - BeautifulSoup 완전 입문 (0) | 2025.03.29 |
외부 CSV 파일 불러오기부터 분석, 저장까지 실전 예제 완전 정복 (0) | 2025.03.28 |
실제 데이터 분석 프로젝트 시작하기 - 인구수 & 평균소득 분석 (기초 예제) (0) | 2025.03.27 |