Backends Ruby

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

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

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

 

패키지 설치

Ruby에서 CSS 선택자로 손쉽게 웹 스크래핑을 구현하기 위해, nokogiri라는 패키지를 설치합니다. 패키지 nokogiri는 XML이나 HTML의 파싱과 탐색을 쉽게 할 수 있는 패키지입니다. 패키지 설치는 아래와 같이 gem 명령어를 통해 진행할 수 있습니다.

gem install nokogiri

 

구현 함수

이제 스크래핑 함수를 구현하면 아래와 같습니다.

이 함수는 먼저 스크래핑의 원리에서 열기에 해당하는 과정을 위해, url 인자로 입력한 URL의 HTML 소스코드를 Ruby의 내장 모듈인 net/http를 이용하여 받아옵니다. 이어지는 찾기 과정은 nokogiri 패키지를 이용하여 CSS 선택자로 간단하게 마칠 수 있습니다. 이러한 순서를 거치면 남은 것은 보기 과정으로, 이 함수에서는 그 결과값을 문자열로 반환합니다.

require 'net/http'
require 'nokogiri'

def scrapWebpage(url, selector)
  res = []

  html = Net::HTTP.get(URI(url))
  Nokogiri::HTML(html).css(selector).each do |v|
    res.push(v.text)
  end

  return res
end

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

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

전체 소스코드는 Github 저장소에서 확인하실 수 있으며, 패키지 설치 명령어를 담은 bat 및 sh 파일도 함께 업로드되어 있습니다. 필요하신 분은 참고하여 주시기 바랍니다.

Leave a Reply

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