ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. 웹크롤링으로 마케팅 리서치 해보기
    마케터 관점의 데이터분석/마케터의 파이썬 활용법 2025. 7. 4. 22:51

     
    지난 1편부터 3편까지는
    마케터의 언어로 파이썬 기초 데이터 분석과
    자동화 로직 설계에 대해 정리했다.
     
    이제 4편부터는
    마케팅 리서치에 유용한
    웹크롤링에 대해 정리하려고 한다.
     
    새로운 챕터 가보자고!



    01.  웹데이터 수집 시작하기

    마케터들은 내부 데이터 분석을 넘어
    외부 데이터를 활용한 경쟁사 분석, 트렌드 수집, 시장 조사 등.
     
    마케팅 인사이트를 확보하기 위해
    많은 시간을 투자한다.
     
    그 이유는 외부 데이터가
    마케팅 전략의 방향성을 결정하는 데
    막대한 영향을 미치기 때문이다.
     
    따라서 웹크롤링을 익혀두면
    마케팅 리서치, 실시간 트렌드 감지, 커뮤니티 반응 확인,
    리뷰/댓글 VOC 수집, 뉴스/블로그 키워드 모니터링 등.
     
    웹에 흩어져 있는 수많은 정보들을 추출해서
    유의미한 인사이트로 전환할 수 있다.
     


     

    웹 크롤링이란?

    웹 상의 정보를 수집해서 내가 원하는 데이터로 정제하는 것인데
    우선 HTML 페이지 구조를 파악하고, 필요한 정보를 추출하면 된다.
     
    크롤링은 두 가지로 나뉜다: 
     
    1. 정적 크롤링(Static Crawling)
    → HTML 소스 안에 데이터가 있는 경우 (requests, BeautifulSoup)
    2. 동적 크롤링(Dynamic Crawling)
    → JavaScript 등으로 로딩되는 SPA 구조 (Selenium)

    웹 페이지 크롤링 기초

    !pip install requests beautifulsoup4 pandas
    
    import requests
    from bs4 import BeautifulSoup
    
    url = "https://news.ycombinator.com/"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    
    title_spans = soup.find_all("span", class_="titleline")
    
    for idx, span in enumerate(title_spans[:5]):
        title = span.find("a")
        print(f"{idx+1}. {title.text}")

     

     


    마케터가 크롤링을 활용해서 가능한 것들

    트렌드 분석검색어 랭킹 수집, 뉴스 헤드라인 수집
    경쟁사 분석자사/타사 홈페이지, 리뷰, 가격 변화 추적
    콘텐츠 기획유저 리뷰 키워드 정리, 소비자 언어 수집
    커머스 모니터링인기 상품 가격, 재고, 평점 주기적 수집
    SEO 최적화타겟 키워드, 메타태그, 제목 구조 분석 → 콘텐츠 개선
    소비자 리서치커뮤니티 게시글/댓글 수집 → VOC 분석

     
    크롤링의 기본부터 차근차근 다룰 줄 알게 되면
    마케터가 마케팅 리서치에 쏟던 시간을 줄일 수 있고,
    더 효율적으로 시간과 리소스를 분배할 수 있게 된다.
     
    그렇게 되면 마케터는 마케팅 전략에 더 집중할 수 있다.

     


    ⚠️ 웹 크롤링 시 주의사항

    웹 크롤링과 관련해서 국내에서 잘 알려진 사례가 있다.
     
    숙박플랫폼 '여기어때'가 경쟁사 '야놀자'의 앱에서 숙박 정보를 무단으로 크롤링했고,
    이에 대해 야놀자는 형사 고소 및 민사 손해배상 청구 소송을 제기했다.
    해당 사건은 결국 대법원까지 이어졌다...
     
    이 사건의 구체적인 전개와 판결 내용은
    아래 기사에서 확인 할 수 있다.
    https://www.hankyung.com/article/202404242738i
     
    기사에서는 크롤링의 위법성에 대한 다양한 의견들과 
    '여기 어때 VS 야놀자' 사례 말고,
    '사랑인 VS 잡코리아' 사례도 있으니
    크롤링의 주의점들을 참고해 보면 좋을 것 같다.
     
    결국에 웹크롤링을 할 때 : 

    • robots.txt를 확인해 크롤링 가능여부 부터 확인하고
    • 불법적 상업활용, 재판매, 저작권 침해 시  법적 이슈 발생
    • API가 있는 경우 우선 사용
    • 반복 요청 시 서버에 부하를 주지 않도록 time.sleep() 사용
    # 예: https://example.com/robots.txt
    User-agent: * # 모든 봇(크롤러)에게 적용
    Disallow: /private/ # /private/ 디렉터리 아래는 크롤링 금지
    Allow: / # 루트 디렉터리(전체 페이지)는 허용

     

    크롤링 가능 여부를 robots.txt로 확인해 보자

    import urllib.robotparser
    
    rp = urllib.robotparser.RobotFileParser()
    rp.set_url("https://news.ycombinator.com/robots.txt")
    rp.read()
    
    # 테스트 URL
    url = "https://news.ycombinator.com/"
    can_fetch = rp.can_fetch("*", url)
    
    print("크롤링 가능 여부:", can_fetch)

     

    마케터를 위한 웹 크롤링 기초 요약

    requests.get()HTML 요청웹 페이지 가져오기
    BeautifulSoup()HTML 파싱 도구HTML 구조 분석
    .find(), .find_all()원하는 태그 선택제목, 날짜, 가격 등 추출
    크롤링 윤리robots.txt, 법적 고려지속 가능한 수집 전략

     


    02. 마케터의 언어로 정리하는 웹 데이터 구조 

    웹크롤링의 기본과 주의사항에 대해 알아봤으니
    이제는 HTML 구조를 읽는 법에 대해 알아보자.
     
    웹페이지는 쉽게 말하면 디자인된 HTML 구조 위에
    콘텐츠, 스타일이나 기능을 얹힌 것이라고 생각하면 더 편하다.
     
    겉보기에는 한 줄의 문장 같지만 
    <div>, <span>, <a>, <ul> 같은 수많은 태그들이 숨겨져 있다.
     
    마케터가 웹 데이터를 수집하려면
    당연히 HTML 구조부터 이해해야
    다음 단계를 시작할 수 있다.
     
    HTML은 트리 구조로 구성되어 있다.

     
    크롤링할 때는 이 구조를 이해하면
    어디에 있는 데이터인지 스스로 알아볼 수 있다.


    예시) HTML 기본 구조로 알아보는 마케팅 활용 

    <html>
      <head>
        <title>2025 베트남 여행 추천 TOP5 - 여행지, 경비, 후기 총정리</title>
      </head>
      <body>
    
        <div class="title">
          <h1>다낭 3박 4일 여행기</h1>
          <p class="author">작성자: yeji | 날짜: 2025.07.01</p>
        </div>
    
        <div id="content">
          <p>베트남 다낭은 요즘 가장 핫한 여행지 중 하나입니다. 물가도 저렴하고 음식도 정말 맛있어요.</p>
        </div>
    
        <div class="review-box">
          <span class="comment">숙소가 깔끔했고, 마사지도 저렴해서 좋았어요!</span>
          <span class="comment">다낭 야시장 분위기가 최고였어요 :)</span>
        </div>
    
        <ul class="product-list">
          <li class="product">[추천] 다낭 자유여행 패키지 3박4일 - 499,000원</li>
          <li class="product">[신혼] 하노이 커플 여행코스 - 599,000원</li>
        </ul>
    
        <table class="ranking">
          <thead>
            <tr><th>랭킹</th><th>키워드</th></tr>
          </thead>
          <tbody>
            <tr><td>1</td><td>베트남 자유여행</td></tr>
            <tr><td>2</td><td>다낭 마사지</td></tr>
            <tr><td>3</td><td>하노이 맛집</td></tr>
          </tbody>
        </table>
    
      </body>
    </html>

     

    HTML 기본 요소

    태그설명마케팅 활용
    <div>구획/묶음뉴스박스, 제품카드
    <span>인라인 묶음할인정보, 라벨
    <a>링크기사 제목, 상세 페이지 연결
    <ul>, <li>리스트키워드 목록, 리뷰 리스트
    <h1> ~ <h6>제목콘텐츠 타이틀
    <table>랭킹, 비교정보
    <title>페이지 제목 (검색 노출 제목)SEO 전략
    <p>본문 텍스트 영역리뷰/콘텐츠 수집
    class="title"스타일·의미 구분용 태그데이터 위치 식별
    id="content"고유 식자별 태그정밀 타겟팅, 세그먼트 분석
    <span class="comment">리뷰/댓글고객 피드백 수집
    <ul><li class="product">상품명</li></ul>상품 리스트경쟁사 모니터링
    <div class="title">뉴스/블로그 타이틀트렌드 분석
    <table class="ranking">검색어 랭킹키워드 인사이트

     


    03. Selector를 활용해서 데이터 추출

    'selector'는 단어 뜻 그대로인 '선별 선택'이라는 뜻이다.
    예를 들어서 커머스 사이트에서 '할인율'만 뽑고 싶다,
    이 뉴스 리스트에서 '제목'만 수집하고 싶다,
    리뷰 중 '별점 5점'만 추출하고 싶다. 
     
    이런 데이터들을 selector로 타깃 데이터를 추출할 수 있다. 
     
    위에 있었던 HTML 예시 구조를 다시 확인해 보자 : 

    <div class="review-box">
      <span class="comment">숙소가 깔끔했고, 마사지도 저렴해서 좋았어요!</span>
      <span class="comment">다낭 야시장 분위기가 최고였어요 :)</span>
    </div>

     
    이런 리뷰 데이터를 크롤링을 하고 싶다면 어떻게 해야 할까?
     
    우선, 태그 + 클래스명 기반으로 추출하는 방법이 있다.

    → find() & find_all()

    reviews = soup.find_all('span', class_='comment')
    for r in reviews:
        print(r.text)
        
    # 출력 결과:
    숙소가 깔끔했고, 마사지도 저렴해서 좋았어요!
    다낭 야시장 분위기가 최고였어요 :)

     
    두 번째는 CSS select 문법으로 하는 방법이다.

    → select() & select_one()

    # 단일 요소
    title = soup.select_one('.title h1').text
    
    # 여러 요소
    products = soup.select('.product')
    for p in products:
        print(p.text)
        
    # 출력 결과
    [추천] 다낭 자유여행 패키지 3박4일 - 499,000원
    [신혼] 하노이 커플 여행코스 - 599,000원

     


    위에서 했던 예시 코드에서 

    !pip install requests beautifulsoup4 pandas
    
    import requests
    from bs4 import BeautifulSoup
    
    url = "https://news.ycombinator.com/"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    
    title_spans = soup.find_all("span", class_="titleline")
    
    for idx, span in enumerate(title_spans[:5]):
        title = span.find("a")
        print(f"{idx+1}. {title.text}")

     
    다양한 추출 사례들을 알아보자: 
     
    1. CSS 셀렉터를 활용하기

      2. 뉴스 링크 추출하기

     
     


    크롤링의 기본 개념과 주의사항 
    그리고 HTML 구조뿐 아니라 
    셀렉터를 활용해 원하는 데이터를
    추출하는 방법까지 익혔다.
     
    확실히 크롤링을 이해하고 나니
    마케팅 리서치 업무의 효율이 올라갈 것 같다.
     
    다음 편에서는
    정적인 HTML 테이블 테이터를 빠르게 수집하고
    마케팅 리포트로 전환하는 과정을 정리할 예정이다.
     
    최근 ADsP 자격증 준비 중인데
    확실히 9 to 6 풀타임 학원 수업에
    자격증 공부까지 병행하니 피로감이 쌓여간다...
     
    하지만 어쩌겠어 
    결국엔 해야지 하는 마음으로...^^
     
    이번 7월에도 멀티캠퍼스 IT 부트캠프에서 
    데이터분석 수업에 더 집중해서 따라가야지...
     
    화이띵 🌚
     

     

     

Designed by Tistory.