그로스 마케팅/학습 기록

웹 크롤링이란? | 마케터를 위한 Python 웹 크롤링 기초 #3 [멋쟁이사자처럼 부트캠프 그로스 마케팅 5기 day 17]

shushu26 2026. 6. 7. 23:02

지난 시간 데이터프레임화와 크롤링 응용 실습에 이어,
이번에는 한 단계 더 나아가 보았습니다.

네이버 블로그 데이터를 직접 수집해 함수(Function)로 자동화하고,
Selenium을 활용해 동적 페이지까지 제어해 본 것인데요.

단순히 데이터를 긁어오는 수준을 넘어, 실제 마케팅 실무에 즉시 투입할 수 있는
크롤링 파이프라인의 기초를 탄탄히 경험할 수 있었던 시간이었습니다.


실습 1. Requests & BeautifulSoup으로 정적 데이터 수집하기

 

첫 번째 실습에서는 네이버 검색 결과에 노출되는 블로그 목록 데이터를 수집해 보았습니다.

특정 키워드를 검색했을 때 나오는 블로그 제목, 블로거명, 게시일 정보를 자동으로 긁어와 구조화하는 작업입니다.

먼저 requests 라이브러리를 사용해 웹페이지에 접속하고 HTML 데이터를 요청합니다.

 

import pandas as pd
import requests as req
from bs4 import BeautifulSoup as bs

# 서비스 차단 방지를 위한 User-Agent 설정
U_A = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
}

keyword = "현대자동차"
url = f"https://search.naver.com/search.naver?ssc=tab.blog.all&sm=tab_jum&query={keyword}"

# 1. 페이지 데이터 요청
res = req.get(url, headers=U_A)

 

요청이 정상적으로 완료(Response [200])되면 서버는 HTML 문서를 반환합니다.

이 문서를 BeautifulSoup을 통해 파싱하여 파이썬이 이해할 수 있는 구조로 분석합니다

 

# 2. BeautifulSoup으로 HTML 구조 분석
soup = bs(res.text, "lxml")

# 3. CSS 선택자를 이용하여 원하는 데이터 영역만 select
title = soup.select("span.sds-comps-text.sds-comps-text-ellipsis.sds-comps-text-ellipsis-1.sds-comps-text-type-headline1.sds-comps-text-weight-sm")
bloger = soup.select("a.fender-ui_228e3bd1.fender-ui_475445f0 > span.sds-comps-text.sds-comps-text-ellipsis.sds-comps-text-ellipsis-1")
posted = soup.select("span.sds-comps-text.sds-comps-text-type-body2.sds-comps-text-weight-sm.sds-comps-profile-info-subtext")

 

추출한 데이터는 리스트에 차곡차곡 담아 마케터에게 가장 친숙한 엑셀 형태의 탭 데이터인 Pandas 데이터프레임(DataFrame)으로 변환해 줍니다.

 

title_list, bloger_list, posted_list = [], [], []

for i in range(len(title)):
    title_list.append(title[i].text.strip())
    bloger_list.append(bloger[i].text.strip())
    posted_list.append(posted[i].text.strip())

# 데이터프레임 구축
blog_dic = {"타이틀": title_list, "블로거": bloger_list, "게시일": posted_list}
blog_df = pd.DataFrame(blog_dic, index=range(1, len(title_list) + 1))
blog_df.index.name = "No."

 

 

실무 생산성을 높이는 팁: '함수화(Function)'

특정 키워드 하나만 긁어오고 끝내면 크롤링의 매력이 떨어집니다. 코드를 함수(Function)로 묶어두면, 아래와 같이 키워드만 쏙쏙 바꿔가며 무한히 재사용할 수 있습니다.

 

# 함수로 정의해두면 한 줄로 크롤링 끝!
blog_list_crawling("트럼프")
blog_list_crawling("AI")
blog_list_crawling("그로스마케팅")

 

매일 아침 출근해서 정기적으로 시장 콘텐츠 트렌드를 모니터링해야 하는 마케터에게는

눈이 번쩍 뜨일 만한 효율성 리테이닝 팁이었습니다.

 

Requests의 한계와 Selenium의 필요성

 

하지만 모든 웹사이트가 이렇게 쉽게 데이터를 제공하는 것은 아닙니다.

최근 많은 서비스는 사용자의 행동에 따라 데이터를 불러오는 동적 페이지 구조를 사용합니다.

 

예를 들어

 

  • 무한 스크롤
  • 실시간 검색 결과
  • 로그인 후 확인 가능한 페이지
  • 버튼 클릭 후 노출되는 데이터

 

등은 단순 HTML 요청만으로 수집하기 어렵습니다.

 

실습 2. Selenium으로 브라우저 직접 제어하기

 

Selenium을 활용하면 실제 사람이 브라우저를 켜고 마우스를 움직이는 듯한 모든 행동을 코드로 완벽하게 모방할 수 있습니다

 

from selenium import webdriver as wb
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = wb.Chrome()
driver.get("https://www.naver.com")

# 검색창을 찾아 원하는 키워드 입력하기
search = driver.find_element(By.CSS_SELECTOR, "#query")
search.send_keys("쿼카")

# 엔터 키를 누르거나 돋보기 버튼 직접 클릭하기
search.send_keys(Keys.ENTER) 
# 또는 btn.click() 사용 가능

# 페이지 맨 밑으로 스크롤 끝까지 내리기 (무한 스크롤 뚫기)
body = driver.find_element(By.TAG_NAME, "body")
body.send_keys(Keys.END)

 

 

오늘 배운 기술을 기반으로 제가 실무에 바로 적용해보고 싶은 시나리오는 역시

'그로스 마케터 역량 트렌드 분석'입니다.

원티드(Wanted)나 사람인에 등록된 '그로스 마케터' 채용공고 수백 건을

크롤링으로 한 번에 수집한 뒤 텍스트 분석을 진행해 보는 것입니다.

 

  • SQL 단어가 언급된 공고의 비율은 몇 %인가?
  • GA4 활용 역량을 필수 조건으로 건 기업은 얼마나 되는가?
  • CRM 마케팅 툴( Braze, Solapi 등) 중 어떤 솔루션 우대 성향이 높은가?

 

이러한 정량적인 통계 지표를 손에 쥐게 된다면,

막연한 추측이 아니라 진짜 시장 데이터에 기반한 커리어 로드맵을 설계할 수 있게 됩니다.

경쟁사 채널 분석이나 업계 모니터링 역시 훨씬 더 과학적인 접근이 가능해지겠죠.

 


 

🦁 데이터로 증명하는 그로스 마케터가 되고 싶다면?

 

🦁 내 성장의 기회, 멋쟁이사자처럼

데이터 분석부터 마케팅 자동화까지, 현업 중심 실무 역량 강화

나에게 맞는 실무 커리큘럼 확인하기 →