[TIL]Data scraping & crawling

영태·2022년 4월 2일
0

[TIL]

목록 보기
12/21

데이터 스크래핑

다른 프로그램에서 생성된 결과물로부터 데이터를 추출하는 기법을 말한다. 주로 웹사이트에서 중요한 정보를 추출하는 과정을 말하는 웹 스크래핑을 가리키는 경우가 많다

웹스크래핑

1. 웹스크래핑 절차

  • 특정 웹 사이트에 HTTP Get 요청을 보낸다
  • 웹사이트가 응답하면 스크래퍼 코드는 HTML 문서를 받아온다
  • 이를 분석해 데이터의 패턴을 찾고 이를 쉽게 추출할 수 있는 코드를 짠다
  • 추출된 데이터를 사용하거나 데이터 베이스에 저장한다

2. 웹스크래핑 목적

  • 콘텐츠 스크래핑
  • 가격 스크래핑
  • 연락처 스크래핑
  • 이미지 스크래핑
  • etc...

이렇게 우리가 스크래핑하려는 특정 웹사이트의 프론트엔드 언어를 분석하면 스크래핑을 이용해 웹사이트의 화면에 띄워져 이용자들이 볼 수 있는 거의 모든 정보를 가져올 수 있다.

3. 웹스크래핑의 문제점

웹사이트를 운영하는 회사 및 제작자들은 대부분 그들 고유의 콘텐츠를 무단으로 다운로드하여 재사용하는 것을 원하지 않는다. 따라서 쉽게 액세스할 수 있는 자원을 가림막으로 만들고 중요 데이터로 접근할 때 보안화 과정을 두어 모든 데이터를 공개하지 않으려 애쓴다.

한편, 스크래퍼는 액세스를 제한하려는 노력에도 불구하고 웹사이트 데이터를 얻고자 한다.

스크래퍼와 콘텐츠 보호 전략 사이에서는 이와 같이 서로 이기려하는 줄다리기를 하고 있다.

그러나 보안이 철저하다고 생각되는 은행권, 카드사 등에서도 스크래핑은 자주 사용되어 왔었다. 일례로 지난해, 지금은 우리가 편하게 사용하고 있는 마이데이터 서비스를 앞두고 정부가 API 시스템을 구축하라는 것과 동시에 스크래핑을 금지시키겠다고 하여 반발이 있었다.

마이데이터 서비스 시범 시행 : 스크래핑 금지? API 의무 적용? 뭐가 다른 거죠

이 글을 보면 금융권에서도 고객 대신 고객들의 개인정보에 접속해 스크래핑 하여 정보를 가져오는 행위를 하고 있었다는 것을 볼 수 있다.

따라서 이것의 옳고 그름을 판단하기에는 정보의 바다인 요즘 세상에서 무리가 있겠지만, 스크래핑을 당하는 입장에선 내가 생각해도 분통이 터질 거 같다.

4. 웹스크래핑 방지 방법

그래서 이를 방지하기 위한 방법들이 있다.

  1. 요청속도 제한
    인간이 웹 페이지에 접근하기 위해 클릭을 하는 등의 상호작용 속도는 예측 가능하다. 따라서 특정 IP 주소가 보내는 요청이 '비인간적'인지를 확인하면 된다.
    정해진 시간 동안 보낼 수 있는 최대 요청 수를 제한함으로써 무분별한 스크래핑을 방지하고 부가적으로 폭발적인 트래픽 요청으로부터 해방될 수 있다

  2. 주기적인 HTML 마크업 수정

스크래핑을 할때 대충 이런식의 로직을 짠다 url로 요청을 보냈을 때 돌아오는 응답값을 기준으로 로직을 짜서 이리저리 분해하고 반복문을 돌리는 구조다.

이렇기 때문에 HTML언어태그를 수정해버리면?
저 로직이 엉망이 될 것이다.

이 점을 이용해 주기적으로 HTML 언어를 수정해 스크래퍼들이 받을 응답값을 바꿔서 예정된대로 동작하게 하지 않게하는 방법이 있다.

다른 더 좋은 방법들도 있지만 이외의 방법들은 보안 전문가의 영역이니 다음에 알아보자;

데이터 크롤링

웹 크롤링은 구글, 네이버, 다음과 같은 포털 사이트들이 인터넷에 있는 다수의 정보를 가져가는 행위다.
구글은 검색 기능을 위해서 인터넷에 연결된 모든 웹 페이지를 돌아다니면서 페이지의 정보를 저장해둔다. 이처럼 포털 사이트에서 대규모의 웹 데이터를 가져가는 것을 웹 크롤링이라고 부른다.

웹 크롤링

웹 크롤링 툴에는 puppeteer, selenium 등이 있다.

그 중 내가 사용해본 puppeteer 는 Headless Chrome 을 제어하도록 도와주는 라이브러리다.

puppeteer는 chromium의 DevTools(크롬에서 만든 라이브러리이기 때문에 크롬의 DevTools랑 판박이다)프로토콜을 이용해 데이터를 크롤링한다.
Chrome 의 렌더링 엔진이 지원하는 최신 스펙의 HTML, CSS, JS 등 렌더링 엔진이 만들 수 있는 모든 화면을 만들어 낼 수 있다.

진정한 크롤링이란..?

그럼 스크래퍼가 하는걸 수십,수천배로 하는거네?
라고 생각할 수 있고 나도 솔직히 그렇게 생각했는데...

그런데 크롤러에 대한 글을 하나 보니 아무것도 모르고 그냥 공부한 걸 로깅하는 내가 쉽게 말을 할 수가 없다...

🖨 '웹 크롤러' 좀 그만 만들어라

이 글을 보면 그저 특정 데이터를 가져오는 한정된 능력의 스크래핑과는 개념 자체가 다른 것 같다.

일반적으로 crawler라는 용어는 명확한 최종 목표나 목표가 없어도 사이트나 네트워크가 제공할 수 있는 것을 끝없이 탐색하면서 정기적, 주기적으로 스스로 웹 페이지를 탐색할 수 있는 프로그램의 능력을 의미한다고 한다. 따라서 우리가 crawler라고 불릴만한 프로그램을 만들기 위해서는 구글과 같은 공룡기업들에서 일하는 천재들이거나 크롤링을 연구하는 천재 프로그래밍학자급의 지식과 실력이 있어야 한다고 생각하게 되었다.

웹 크롤링의 법적 문제

물론 스크래퍼와 마찬가지로 크롤링도 윤리적인 문제가 존재하며 그 규모가 큰만큼 법적인 문제로까지 이어질 수 있다

다음은 데이터 크롤링으로 인한 대규모 기업간의 소송에 관한 기사다

“여기어때 크롤링은 DB권 침해”…최고 손배액 10억원 받아 낸 법무법인 민후
재판부는 “온라인 숙박 예약 서비스에서는 영업 정보가 매우 중요한 무형 자산에 해당하고, 야놀자가 2016년 한 해에 영업부서 인건비만으로 26억원을 초과하는 금액을 투여한 사실이 인정된다”며 “여기어때는 야놀자에게 손해배상금 10억원을 지급하라”고 판결했다.(1심 판결)

2심에서는 무죄가 나왔지만...뭐 아무튼?
대규모 정기적 스크래핑이라 할 수 있는 크롤링은 윤리적, 법적 문제까지 낳는다.

마치며

감상?이라 할 수 있는 건 위에서 다 적은 것 같다.
스크래핑&크롤링은 확실히 매력적이다.
내가 만들지 않은 웹의 정보를 쉽게 가져올 수 있고 이를 데이터베이스에 저장하여 데이터 자산을 모을 수 있다.

그러나 공부하다보니 확실히 고민이 생긴다.
크롤링을 실습할 때는 쉽다고 생각했는데 막상 크롤링을 실무에서 쓰기에는 실력적으로 가능할지...(과연 그냥 puppeteer같은 라이브러리를 이용하는게 가능할까?)
또 윤리적으로 문제되지 않는 선을 어떻게 지킬지...

이런 불편한 점들을 실제로 맞닥뜨렸을 때 어떻게 해결할지를 고민하게 됐다

Reference

What is data scraping?
마이데이터 서비스 시범 시행 : 스크래핑 금지? API 의무 적용? 뭐가 다른 거죠
“여기어때 크롤링은 DB권 침해”…최고 손배액 10억원 받아 낸 법무법인 민후
🖨 '웹 크롤러' 좀 그만 만들어라
웹 크롤링과 웹 스크래핑의 차이점

profile
개발 공부중

0개의 댓글