Data Mining R

R에서 CSS 선택자로 간편하게 웹 스크래핑(웹 크롤링)을 하는 방법

웹 스크래핑(Web Scraping) 또는 웹 크롤링(Web Crawling)은 웹 페이지로부터 원하는 정보를 추출하는 기법입니다. 어떤 서비스에서 API가 별도로 제공되고 있지 않지만 웹 페이지로는 정보가 제공되고 있을 때, 웹 스크래핑 기법을 이용하면 원하는 정보를 획득할 수 있습니다.

웹 스크래핑의 원리에 대해서는 이전 글인 웹 스크래핑(웹 크롤링)의 원리에서 다루었습니다. 이번 글에서는 Ruby에서 패키지 2가지를 조합하여 손쉽게 구현한 웹 스크래핑 함수 예제코드를 소개합니다.

 

구현 함수

R에서는 HTML 파싱을 위한 rvest라는 패키지가 있습니다. 이 패키지에 포함된 10여개의 함수는 웹 스크래핑을 매우 손쉽게 구현할 수 있게 합니다.

먼저 read_html() 함수는 스크래핑의 원리에서 열기에 해당하는 과정에 사용되고, 이어서 html_elements() 함수로 CSS 선택자를 이용한 찾기 과정을 구현할 수 있습니다. 마지막으로 html_text() 함수를 이용해 HTML 태그 내의 문자열만 가져오면 보기 과정을 마칠 수 있습니다. 아래는 이 과정을 하나의 함수로 구현한 것입니다.

library(rvest);

scrapWebpage <- function(url, selector) {
  html <- read_html(url);
  elem <- html_elements(html, selector);
  return (html_text(elem));
}

실제로 위 함수를 사용하는 예는 아래와 같습니다. 스크래핑할 URL와 스크래핑할 부분의 CSS 선택자를 넣어 간단하게 사용할 수 있습니다. 반환되는 값은 배열이며, 입력한 CSS 선택자에 해당하는 부분이 여러 군데이더라도 배열에 해당하는 값이 모두 들어옵니다.

url <- 'https://dev.epiloum.net/1926';
selector <- 'h1.site-title a';
scrapWebpage(url, selector);

전체 소스코드는 Github 저장소에서 확인하실 수 있습니다. 필요하신 분은 참고하여 주시기 바랍니다.

Leave a Reply

Your email address will not be published. Required fields are marked *