현대 웹사이트 표면에 널려 있는 수많은 방대한 쇼핑몰 상품명과 가격, 최신 뉴스 헤드라인 주식 정보 수치들을 지금도 일일이 마우스로 화면을 드래그 앤 드롭해서 엑셀에 한땀 한땀 복사 붙여넣기(Ctrl+C, V)로 크롤링 노가다를 하고 계신 적이 한 번이라도 있으신가요? 이 막일 수준의 인간 반복 지옥 작업을 시스템 코딩 구문 단 몇 줄로 해결해주는 파이프라인 자동화 기술을 컴퓨터 공학에서는 통칭 “웹 스크래핑(Web Scraping)” 혹은 크롤링이라고 부릅니다.
R 진영에서는 rvest 패키지 봇을 통해 타겟 도메인 웹 페이지 뒤편의 원시 HTML 돔(DOM) 뼈대 구조를 1초에 수백 번 광속 스캔하고, 내가 찾기 원하는 텍스트 정보만 고기 결 바르듯 정확하게 칼날로 도려내 긁어올 수 있습니다. 비전공 초보자도 해커 마법사처럼 웹 데이터를 수집할 수 있게 해주는 기초 사용법과 크롬 브라우저 비장의 자동화 도구 무기를 소개합니다.
1. 스크래핑 명사수의 비장의 무기: SelectorGadget 크롬 확장 프로그램
인터넷 정보를 크롤링을 하려면 나의 로봇 목표물이 웹 페이지의 어느 뒷단 “태그 은신처(CSS Selector: <div> <span>...)”에 겹겹이 코딩되어 숨어있는지 정밀한 GPS 좌표를 알아야 합니다. 화면을 해부하는 F12 등 복잡한 프론트엔드 개발자 도구 패널을 억지로 열어 검사하며 고통받을 필요 없이, 그냥 눈에 보이는 곳을 클릭만 하면 영역을 잡아주는 구글 크롬 스토어 확장 프로그램인 SelectorGadget을 무조건 강력하게 추천합니다.
- 크롬 웹스토어 마켓플레이스에서
SelectorGadget을 검색해 브라우저에 무료로 추가 설치합니다. - 스크랩 수집하고 싶은 타겟 화면 웹페이지를 띄워놓고 우측 상단의 돋보기 확장 프로그램 아이콘을 켭니다. (하단에 바가 생깁니다)
- 웹 페이지의 화면 디자인 위로 마우스를 가져가면 가져오고 싶은 타이틀 제목(예: 1열 첫 번째 나이키 상품명 텍스트)을 좌클릭하여 선택합니다. (잡힌 곳이 초록색 박스로 변합니다)
- 유사한 성격의 텍스트가 노란색 박스로 같이 연쇄적으로 잡힙니다. 만약 가져올 필요가 없는 불필요한 배너 속 광고 텍스트 요소가 같이 잡혔다면, 그 부분을 다시 한번 클릭해 명단에서 튕겨내 뺍니다. (빨간색 제외 구역으로 변함)
- 마법처럼 우측 하단 텍스트 콘솔 박스에, 타겟 정보만을 100% 명중하는 해당 사이트 CSS 선택자 영문 압축 코드(예:
.featured-title , .card-header)가 추출 완료됩니다! 이 알파벳 구문을 복사해(Ctrl+C) 둡시다.
2. rvest 패키지 봇으로 낚시대 던져 정보 낚아채 오기
웹사이트 주소(URL)라는 어망과 조준경(위에서 복사한 CSS 특수 선택자)이 완벽히 준비되었다면 로직 코드는 극도로 허무할 만큼 단순해집니다.
# install.packages("rvest")
library(rvest)
# 1. 낚시대 던지기: 웹 주소를 인자로 넘겨 넣어 해당 사이트 서버가 뱉는 HTML 백엔드 전체 구조 덩어리를 임시로 다 긁어 가져옵니다.
target_url <- "https://courses.statisticsplaybook.com/"
web_page_dom <- read_html(target_url)
# 2. 정밀 타겟팅 추출: SelectorGadget으로 복사해온 CSS 선택자 코드로 '정보가 담긴 핵심 노드 부분'만 알맹이를 핀셋으로 과도하게 도려냅니다.
lecture_title_list <- web_page_dom |>
html_elements(".course-card__title") |> # 방금 전 알아낸 클래스명 조준 발사!
html_text() # html 태그 껍데기는 다 찢어 버리고 도려낸 부분 내부의 순수 잉크 "텍스트 자연어" 문자 배열만 쫙 뽑아 벡터로 묶습니다!
head(lecture_title_list)
> [1] "R 기초 완벽 공략집"
> [2] "실전 데이터 분석가의 시각화 마스터 바이블"
> [3] "파이썬 크롤링 업무 효율 자동화 과정" ...
3. 자연어 텍스트 말고 이미지 링크 주소나 숨겨진 속성을 몰래 가져오고 싶다면?
가끔은 화면 겉페이지에 떠 있는 글자가 아니라 썸네일 이미지의 원본 파일 소스 위치 링크(src="http...")나, 게시글을 바탕으로 클릭 시 아웃바운드로 넘어가는 숨겨진 이동 웹 URL 주소(href="http..."), 또는 시각장애인용 은닉 이미지 뒷면 설명글(alt) 등 HTML 태그 내부의 보이지 않는 ‘특수 속성(Attribute)’ 장막을 그대로 파싱하여 추출해야 할 때가 있습니다. 이 경우 텍스트를 빼는 게 아니니 html_attr() 추출 함수를 사용합니다.
# 이미지의 물리적 원본 저장 서버 다운로드 주소(src)를 쫙 긁어오고 싶을 때
img_urls <- web_page_dom |>
html_elements(".product-card img") |>
html_attr("src") # 속성 내부 인자 파싱 완료!
img_urls[1:2]
> [1] "https://asset.example.com/images/cover_r_basic.jpg"
> [2] "https://asset.example.com/images/cover_python.jpg"
🚨 초보 크롤러가 반드시 명심해야 할 법적 스크래핑 3대 에티켓 매너 (주의사항)
1.robots.txt금지구역 확인하기: 무작정 긁기 전 타겟 사이트 루트 주소 뒤에/robots.txt를 쳐서 사이트 주인이 크롤러 수집 봇의 접근 자체를 명시적으로 막아둔 법적 사각 구역인지 인가 상태를 꼭 체크하세요.
2. 상용 지적 재산권 데이터 유의: 공개되었더라도 피땀 흘려 크롤링한 타인의 비즈니스 DB 데이터를 여러분 본인의 영리적 유료 상품으로 상업적으로 함부로 배포 및 가공 판매하면 심각한 영업방해 등 법적 제재를 치르게 됩니다.
3. 서버 매너 간격 지키기:for루프나 반복문 크롤러 봇을 악의적으로 광속 뺑뺑이 돌릴 때는 코드 끝에Sys.sleep(1)을 넣어 데이터 호출 간 무조건 1초씩 아량을 베풀어 쉬어간다면 상대방 기업망 웹 서버 터짐(디도스 장애 초래) 현상을 철저히 예방할 수 있는 젠틀한 크롤러 전문가가 됩니다.
당신이 좋아할 만한 콘텐츠
by Google Adsense