ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 선택자를 활용해 태그 구조를 탐색하고 원하는 데이터 선택
    실제 예제멜론 차트 노래 제목과 가수 정보를 가져옴

    이제 웹 크롤링을 활용해 다양한 데이터 수집이 가능하다! 🚀

Designed by Tistory.