-
[2월 3주차-2/18(1)]웹 스크래핑과 Selenium을 활용한 크롤링 가이드 🚀Why Not SW CAMP 5기/수업 기록 2025. 2. 18. 11:38
웹 크롤링과 스크래핑을 활용하면 원하는 데이터를 자동으로 수집할 수 있다. 이번 글에서는 Selenium과 BeautifulSoup을 이용해 웹페이지 데이터를 수집하는 방법을 다룬다.
1️⃣ Selenium을 활용한 웹페이지 접근
웹사이트의 동적 콘텐츠를 크롤링하기 위해 Selenium을 사용하여 크롬 브라우저를 실행하고, HTML을 가져오는 방법을 알아보자.
✅ Selenium 설치 및 실행
pip install selenium
✅ 크롬 브라우저 실행 및 웹페이지 HTML 가져오기
from selenium import webdriver # 크롬 브라우저 실행 driver = webdriver.Chrome() # 네이버 접속 url = 'https://www.naver.com/' driver.get(url) # 웹페이지 HTML 다운로드 html = driver.page_source
이제 웹페이지의 HTML을 가져왔으므로, BeautifulSoup을 사용하여 원하는 데이터를 추출할 수 있다.
2️⃣ BeautifulSoup을 활용한 HTML 데이터 파싱
✅ 샘플 HTML 데이터
html = ''' <html> <head> </head> <body> <h1> 우리동네시장</h1> <div class = 'sale'> <p id='fruits1' class='fruits'> <span class = 'name'> 바나나 </span> <span class = 'price'> 3000원 </span> <span class = 'inventory'> 500개 </span> <span class = 'store'> 가나다상회 </span> <a href = 'http://bit.ly/forPlaywithData' > 홈페이지 </a> </p> </div> <div class = 'prepare'> <p id='fruits2' class='fruits'> <span class ='name'> 파인애플 </span> </p> </div> </body> </html> '''
✅ HTML 파싱 및 데이터 추출
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') # 태그명으로 찾기 tags_span = soup.select('span') # 모든 <span> 태그 선택 ''' list로 만들어짐 [<span class="name"> 바나나 </span>, <span class="price"> 3000원 </span>, <span class="inventory"> 500개 </span>, <span class="store"> 가나다상회 </span>, <span class="name"> 파인애플 </span>] ''' tags_p = soup.select('p') ''' p 태그 안에 있는 것들도 선택 됨 [<p class="fruits" id="fruits1"> <span class="name"> 바나나 </span> <span class="price"> 3000원 </span> <span class="inventory"> 500개 </span> <span class="store"> 가나다상회 </span> <a href="http://bit.ly/forPlaywithData"> 홈페이지 </a> </p>, <p class="fruits" id="fruits2"> <span class="name"> 파인애플 </span> </p>] ''' # 특정 클래스 선택 tags_name = soup.select('span.name') # 과일 이름만 선택 # [<span class="name"> 바나나 </span>, <span class="name"> 파인애플 </span>] # 계층 구조를 활용한 선택 tags_banana = soup.select('#fruits1 > span.name') # '바나나'만 선택 tags_banana2 = soup.select('div.sale > #fruits1 > span.name') # '바나나'만 선택 # 첫 번째 태그만 선택 tags = soup.select('span.name')[0] # <span class="name"> 바나나 </span> # 태그에서 텍스트 추출 content = tags.text.strip() # '바나나'
이제 원하는 데이터를 정확하게 추출할 수 있다! 🎯
3️⃣ 멜론 노래 순위 크롤링 🎵
멜론 차트에서 노래 제목과 가수를 크롤링해보자!
✅ Selenium과 BeautifulSoup을 활용한 크롤링
from bs4 import BeautifulSoup from selenium import webdriver # 크롬 브라우저 실행 driver = webdriver.Chrome() # 멜론 차트 페이지 접속 url = 'http://www.melon.com/chart/index.htm' driver.get(url) html = driver.page_source # BeautifulSoup 객체 생성 soup = BeautifulSoup(html, 'html.parser')
✅ 노래 제목 & 가수 크롤링
# 첫 번째 행 제외 후, 모든 곡 정보 가져오기 songs = soup.select('tr')[1:] # 첫 번째 곡 정보 가져오기 song = songs[0] # 노래 제목 찾기 title = song.select('div.ellipsis.rank01 > span > a')[0].text # 'REBEL HEART' # 가수 찾기 singer = song.select('div.ellipsis.rank02 > span > a')[0].text # 'IVE (아이브)'
🎯 정리 📌
✅ Selenium을 사용하여 웹사이트에 접속하고 HTML을 가져옴
✅ BeautifulSoup을 이용해 HTML을 파싱하고 원하는 데이터를 추출
✅ CSS 선택자를 활용해 태그 구조를 탐색하고 원하는 데이터 선택
✅ 실제 예제로 멜론 차트 노래 제목과 가수 정보를 가져옴이제 웹 크롤링을 활용해 다양한 데이터 수집이 가능하다! 🚀
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 3주차-2/18(3)]📊 YouTube 채널 랭킹 크롤링 및 데이터 분석 (0) 2025.02.18 [2월 3주차-2/18(2)]MelOn, Bugs, Genie 크롤링 후 Excel 파일로 저장 및 통합 🎵 (1) 2025.02.18 [2월 3주차-2/17(2)]📊 파이썬 웹 스크래핑으로 삼성전자 주가 데이터 분석하기 (1) 2025.02.17 [2월 3주차-2/17(1)]📊 심부전 데이터 분석: 데이터 전처리부터 시각화까지! (0) 2025.02.17 [2월 2주차-2/14]🎬 넷플릭스 데이터 분석 프로젝트 (2) 2025.02.14