R 웹크롤링 기초 SelectorGadget (rvest)

현대 웹사이트 표면에 널려 있는 수많은 방대한 쇼핑몰 상품명과 가격, 최신 뉴스 헤드라인 주식 정보 수치들을 지금도 일일이 마우스로 화면을 드래그 앤 드롭해서 엑셀에 한땀 한땀 복사 붙여넣기(Ctrl+C, V)로 크롤링 노가다를 하고 계신 적이 한 번이라도 있으신가요? 이 막일 수준의 인간 반복 지옥 작업을 시스템 코딩 구문 단 몇 줄로 해결해주는 파이프라인 자동화 기술을 컴퓨터 공학에서는 통칭 “웹 스크래핑(Web Scraping)” 혹은 크롤링이라고 부릅니다.

R 진영에서는 rvest 패키지 봇을 통해 타겟 도메인 웹 페이지 뒤편의 원시 HTML 돔(DOM) 뼈대 구조를 1초에 수백 번 광속 스캔하고, 내가 찾기 원하는 텍스트 정보만 고기 결 바르듯 정확하게 칼날로 도려내 긁어올 수 있습니다. 비전공 초보자도 해커 마법사처럼 웹 데이터를 수집할 수 있게 해주는 기초 사용법과 크롬 브라우저 비장의 자동화 도구 무기를 소개합니다.

1. 스크래핑 명사수의 비장의 무기: SelectorGadget 크롬 확장 프로그램

인터넷 정보를 크롤링을 하려면 나의 로봇 목표물이 웹 페이지의 어느 뒷단 “태그 은신처(CSS Selector: <div> <span>...)”에 겹겹이 코딩되어 숨어있는지 정밀한 GPS 좌표를 알아야 합니다. 화면을 해부하는 F12 등 복잡한 프론트엔드 개발자 도구 패널을 억지로 열어 검사하며 고통받을 필요 없이, 그냥 눈에 보이는 곳을 클릭만 하면 영역을 잡아주는 구글 크롬 스토어 확장 프로그램인 SelectorGadget을 무조건 강력하게 추천합니다.

  1. 크롬 웹스토어 마켓플레이스에서 SelectorGadget을 검색해 브라우저에 무료로 추가 설치합니다.
  2. 스크랩 수집하고 싶은 타겟 화면 웹페이지를 띄워놓고 우측 상단의 돋보기 확장 프로그램 아이콘을 켭니다. (하단에 바가 생깁니다)
  3. 웹 페이지의 화면 디자인 위로 마우스를 가져가면 가져오고 싶은 타이틀 제목(예: 1열 첫 번째 나이키 상품명 텍스트)을 좌클릭하여 선택합니다. (잡힌 곳이 초록색 박스로 변합니다)
  4. 유사한 성격의 텍스트가 노란색 박스로 같이 연쇄적으로 잡힙니다. 만약 가져올 필요가 없는 불필요한 배너 속 광고 텍스트 요소가 같이 잡혔다면, 그 부분을 다시 한번 클릭해 명단에서 튕겨내 뺍니다. (빨간색 제외 구역으로 변함)
  5. 마법처럼 우측 하단 텍스트 콘솔 박스에, 타겟 정보만을 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


관련 글 보기