▼오늘 배운 사항들
1. 동적 크롤링
- selenium
Part 1. 동적 크롤링
[크롤링의 중요성]
- 크롤링 할 줄 알면, 필요한 데이터 수집을 엄청 빠르게 끝낼 수 있음
| 경쟁사 가격 모니터링 | 경쟁사 쇼핑몰에서 가격 자동 수집 |
| 키워드 리서치 | 검색 결과 상위 노출 콘텐츠 자동 수집 및 분석 |
| 리뷰 분석 | 앱스토어, 쇼핑몰 리뷰 대량 수집 후 감성 분석 |
| 광고 소재 리서치 | 경쟁사 광고 문구, 랜딩 페이지 자동 수집 |
| 트렌드 파악 | SNS 해시태그, 커뮤니티 인기 게시글 수집 |
[셀레니움]
- 브라우저를 코드로 조정하는 도구
- 요소 찾기 : 요소에 필요한 데이터가 있어서 요소 찾는게 핵심
[크롤링 해보기]
1. 코랩에 셀레니움 설치
2. 요소 찾기
- driver.get()으로 실행하고나서 driver.quit()으로 멈춰줘야 함(안그러면 계속 실행 ---)
driver = webdriver.Chrome(options=options, service=service) #request와 유사, 움직일 드라이버
driver.get("https://quotes.toscrape.com/") #움직여야할 곳 입력
from selenium.webdriver.common.by import By #요소 가져올 기준
#첫번째 명언 가져오기-1
quote_first = driver.find_element(By.CSS_SELECTOR, "body > div > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text" )
#-2
quote_first = driver.find_element(By.CSS_SELECTOR, "div.quote span.text" )
#-3
quote_first = driver.find_element(By.CSS_SELECTOR, "div.col-md-8 span.text" )
print(f"첫번째 명언: {quote_first.text}")


- 명언 하나 가져오기
- quote 밑에 span - text 태그에 우리가 원하는 명언 내용이 있음



- 모든 명언 가져오기
- 리스트라서 안나옴. 반복문을 활용해서 리스트 1개씩 뽑아야 출력이 가능함


더보기

모든 명언 가져오기 활용한 모든 태그 가져오기

- 명언과 저자를 같이 찾아서 리스트에 담기
- 리스트라서 안나옴. 반복문을 활용해서 리스트 1개씩 뽑아야 출력이 가능함
import pandas as pd # 이따 데이터프레임 만들거니까
driver = webdriver.Chrome(options=options, service=service)
driver.get("https://quotes.toscrape.com/")
blocks = driver.find_elements(By.CSS_SELECTOR, "div.quote" ) #import by 위에 해서 코랩이 기억중~ 생략~
#df용
quotes_box = []
for block in blocks:
text = block.find_element(By.CSS_SELECTOR, "span.text").text
author = block.find_element(By.CSS_SELECTOR, "small.author").text
print(f"{author} : {text}")
#df용인 딕셔너리
quote_dict = {
"저자" : author,
"명언" : text
}
#df용
quotes_box.append(quote_dict) #for문 돌리면서 quotesbox에 차곡차곡 넣는다~


- CSV파일 저장하기
- 리스트라서 안나옴. 반복문을 활용해서 리스트 1개씩 뽑아야 출

- Next 버튼 누르고 다음 페이지도 수집하기
- 중복값 제거 : set
더보기
* 3페이지까지 태그값 수집
driver = webdriver.Chrome(options=options, service=service)
driver.get("https://quotes.toscrape.com/")
tag_list =[]
#1페이지에 있는 태그값 모으기
tags = driver.find_elements(By.CSS_SELECTOR, "div.tags a.tag" )
for t in tags:
print(t.text)
tag_list.append(t.text)
#다음으로 넘어가기
btn = driver.find_element(By.CSS_SELECTOR, "li.next a")
btn.click()
print("-------------------2페이지 시작----------------")
#2페이지 태그값 모으기
tags = driver.find_elements(By.CSS_SELECTOR, "div.tags a.tag" )
for t in tags:
print(t.text)
tag_list.append(t.text)
#다음으로 넘어가기
btn = driver.find_element(By.CSS_SELECTOR, "li.next a")
btn.click()
#3페이지 태그값 모으기
tags = driver.find_elements(By.CSS_SELECTOR, "div.tags a.tag" )
print("-------------------3페이지 시작----------------")
for t in tags:
print(t.text)
tag_list.append(t.text)
print(tag_list)
# set : 중복 제거된 값만 보기
print(set(tag_list))
더보기
*반복문으로 태그값 수집
태그값 위에 for range해서 돌릴 페이지 수 설정
import time
driver = webdriver.Chrome(options=options, service=service)
driver.get("https://quotes.toscrape.com/")
all_tags = []
for act in range(1,4) : #가장 큰 카테고리 page부터 반복문 시작 - 1,2,3페이지 하겠다 - 10페이지까지면 (1,11)
print(act, "--------------------------------------------")
# 1) 태그값 찾기
tags = driver.find_elements(By.CSS_SELECTOR, "div.tags a.tag" )
for t in tags:
print(t.text)
#태그값 모으기
tag_list.append(t.text)
if act == 3: #act 값이 3일 때 = act 3번째 했을 때
break #가장 가까운 for문 탈출한다.
# 2) 버튼 찾고 누르기
btn = driver.find_element(By.CSS_SELECTOR, "li.next a")
btn.click()
print("--------------버튼 눌렀따")
time.sleep(2)

- if act , break 로 비효율 활동 처리
- 마지막 버튼 누를 필요가 없는데 누르는 비효율 활동 발견


Part 2. 네이버 블로그 내용 크롤링 하기
1. 브라우저 열기
2. 링크 방문
3. frame 전환 - iframe인 경우, ex 네이버
import requests
import pandas as pd
client_id = "YOUR_ID"
client_secret = "YOUR_SECRET"
url = "https://openapi.naver.com/v1/search/blog.json"
headers = {
"X-Naver-Client-Id": client_id,
"X-Naver-Client-Secret": client_secret}
params = {
"query": "SQLD 합격후기",
"display": 10}
response = requests.get(url, headers=headers, params=params)
data = response.json()
links = []
for item in data["items"]:
links.append(item["link"])
df_links = pd.DataFrame(links, columns=["url"])
df_links
driver = webdriver.Chrome(options=options, service=service)
title_list = []
content_list = []
for url in df_links["url"] :
driver.get(url)
driver.switch_to.frame("mainFrame") #frame 전환 : 네이버의 경우, 프레임을 안쪽으로 한 번 더 들어가야함
title = driver.find_element(By.CSS_SELECTOR, "div.se-title-text span").text
content = driver.find_element(By.CSS_SELECTOR,"div.se-main-container").text
#print(title, content)
title_list.append(title)
content_list.append(content)
driver.switch_to.default_content() #메인프레임으로 들어갔었으니 새로운 url로 들어가야하니 나가는거 명시하기
df_links["title"] = title_list #컬럼만들어주기
df_links["content"] = content_list
df_links
df_links.to_csv("result.csv", index=False, encoding="utf-8-sig")


더보기

앞선 파이썬으로 하는 데이터 시각화에 비해 크롤링이 얼마나 중요한지 와닿지가 않아서 집중력이 흐려지긴 했다.
크롤링만 전문으로 해서 크몽으로 팔기도 한다는데 역시 돈버는 방법은 무궁무진하다.
앗싸 주말엔 내가 계획한대로 공부하고 실습하고 과제하고 내 멋대로 할 수 있어
sqld 자격증 공부하고 스터디 과제하고 대출기한 얼마 남지 않은 마케팅 서적읽고 개인과제 제출하고 채용공고 확인해보고 커리어로드맵 생각하고...
아! 고등학교 때는 어떻게 새벽7시부터 자정까지 학교에 있었을까

'Growth Marketing > GM4' 카테고리의 다른 글
| [TIL-260421] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day29 | 전자상거래 퍼널분석 (0) | 2026.04.23 |
|---|---|
| [TIL-260420] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day28 | 데이터 전처리 실습 (0) | 2026.04.20 |
| [TIL-260416] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day26 | 크롤링-xml, json (0) | 2026.04.16 |
| [TIL-260415] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day25 | 프롬프트 & RSS (1) | 2026.04.15 |
| [TIL-260414] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day24 | API & MCP (1) | 2026.04.14 |