개발자님들 질문이 있습니다.
페이지 정보
본문
제가 visual studio 2019로 스크래핑 툴을 개발중인데 외부 라이브러리 없이 자체적으로 개발하려고 합니다.
지금까지 스크래핑 라이브러리들을 사용, 분석한 결과 스크래핑 엔진에는 3가지의 방법이 있더군요.
1. 직접적인 서버 통신 기반: 아는 회사가 개발한 스크래핑 툴이 이렇게 개발했다고 합니다. javascript를 사용하여 2007년쯤 만들었다고 하는데 자세히는 알려주지 않네요.
대략 분석해보니 nodejs, javascript를 이용하여 xmlhttprequest, fetch 처럼 직접적으로 서버에 request를 보내거나 할 수 있다고 하네요.
장점
용량이나 리소스나 가볍다
단점
외부 라이브러리 없이는 개발이 빡쌔다.
처음부터 공부를 시작해야 한다는 단점.
아직 익숙하지 않은 언어라 동적html 처리는 어떻게 하는지? 홈택스 같은 사이트에서 아직 데이터를 땡겨보진 못해서 되기나 하는지 잘 모름.
2. cef 브라우저 기반: cefsharp 같이 cef브라우저를 내장시켜서 동적 html 렌더링, 크롬브라우저를 내장시켜 사용한다고 이해하시면 됩니다. .
지금 이 방식을 이용한 툴을 개발중이긴 한데, 종종 javascript가 외부 스크립트에 연결되어 있는 웹사이트들은 이벤트 핸들러가 분리되어 있어 javascript 명령이 안먹힙니다.
이것도 개발중이라 아직 직접 데이터를 땡겨보진 했습니다.
현재 개발하다 막혀서 재검토중인 방식(현재 질문 올리게 만든 원흉).
장점
나에게 익숙한 c# 기반이다.
직접적인 서버 통신 방식보다는 개발하기 쉬워보인다.
단점
직접적인 서버 통신보다는 리소스 사용량이 많다는 단점.
크로미움 엔진을 주기적으로 업데이트 해줘야 함
3. web driver 기반: selenium, puppeteer 등 여러 유명한 스크래핑 라이브러리들이 대부분 사용합니다.
사용자 컴에 설치된 브라우저를 웹드라이버로 통제합니다.
장점
위 두 방법보단 안정적이고 쉽다고 판단됨.
단점
데이터 이동량에 따라 속도가 느려지고, 브라우저 종속성이 있다.
(사용자 컴퓨터에 드라이버에 따른 브라우저가 설치되어 있어야 하지만,
이건 인스턴스 구조를 통일시켜
사용자 컴에 설치된 브라우저를 찾아내
설치된 것으로 인스턴스만 바꿔 선언하는 식으로 개발하면 해결 되리라 봄.)
외부에서 만든 브라우저, 브라우저 드라이버를 사용하기 때문에 직접적인 기술적 통제가 힘듬.(외부 업데이트나 문제에 의존하게 됨.)
다른 스크래핑 회사 이야기 들어보면 위 1번 방식으로 개발했다고 하는데.. 익숙하지도 않고 대체 어떻게 하는지를 모르겠습니다.
2번으로 하고 있긴 한데 이게 맞는 방식인지 의문이기도 하구요.
다른 분들 생각은 어떠하신가요?
회사 자체툴로서 우리가 스크래핑 툴을 통제하려면 위 1번 방식이 좋아보이는데 대체 가능하기나 한건가 의문입니다.