이 글에서는 다음을 다룹니다:
- PhantomJS의 신비 해제
- 데이터 크롤링에 PhantomJS 사용의 장단점
- 단계별 PhantomJS 데이터 수집 가이드
- 데이터 자동화: 수동 스크래핑보다 쉬운 대안들
PhantomJS의 신비 해제
PhantomJS는 ‘헤드리스 웹 브라우저’입니다. 즉, 그래픽 사용자 인터페이스(GUI)가 없으며, 대신 스크립트만으로 실행됩니다(더 가볍고 빠르며 효율적임). JavaScript(JS)를 사용해 코드 테스트나 데이터 수집 등 다양한 작업을 자동화하는 데 활용할 수 있습니다.
초보자의 경우, 먼저 CLI에서 ‘npm’을 사용하여 컴퓨터에 PhantomJS를 설치하는 것을 권장합니다. 다음 명령어를 실행하면 됩니다:
npm install phantomjs -g
이제 ‘phantomjs’ 명령어를 사용할 수 있습니다.
데이터 크롤링에 PhantomJS를 사용할 때의 장단점
PhantomJS는 여러 장점을 지니고 있습니다. 앞서 설명한 바와 같이 ‘헤드리스(headless)’ 특성 덕분에 그래픽을 로드할 필요가 없어 테스트나 정보 수집 속도가 빠릅니다.
PhantomJS는 다음과 같은 작업을 효율적으로 수행하는 데 활용할 수 있습니다:
스크린 캡처
PhantomJS는 PNG, JPEG, 심지어 GIF까지 캡처하고 저장하는 과정을 자동화하는 데 도움이 됩니다. 이 기능 덕분에 프론트엔드 사용자 인터페이스/경험 보증 작업을 훨씬 쉽게 수행할 수 있습니다. 예를 들어, 경쟁사 제품 목록의 이미지를 수집하거나 자사 제품 목록이 제대로 표시되는지 확인하기 위해 Phantomjs amazon.js 명령줄을 실행할 수 있습니다.
페이지 자동화
이는 개발자의 시간을 크게 절약해 주는 PhantomJS의 주요 장점입니다. Phantomjs userAgent.js와 같은 명령줄을 실행함으로써 개발자는 특정 웹 페이지와 관련된 JS 코드를 작성하고 검증할 수 있습니다. 여기서 주요 시간 절약 효과는 이 과정이 자동화될 수 있으며, 브라우저를 열지 않고도 수행 가능하다는 점입니다.
테스트
PhantomJS는 Selenium과 같은 다른 인기 웹 스크래핑 도구와 마찬가지로 프로세스를 간소화하므로 웹사이트 테스트 시 유리합니다. GUI가 없는 헤드리스 브라우징은 문제 스캔을 더 빠르게 수행할 수 있게 하며, 오류 코드를 발견하여 명령줄 수준에서 전달합니다.
개발자들은 또한 코드가 실제 배포되기 전에 테스트하기 위해 PhantomJS를 다양한 유형의 지속적 통합(CI) 시스템과 통합합니다. 이는 개발자가 실시간으로 오류가 발생한 코드를 수정할 수 있도록 도와 더 원활한 라이브 프로젝트를 보장합니다.
네트워크 모니터링 / 데이터 수집
PhantomJS는 네트워크 트래픽/활동 모니터링에도 활용됩니다. 많은 개발자가 다음과 같은 대상 데이터 수집을 지원하도록 프로그래밍합니다:
- 특정 웹 페이지의 성능
- 코드 줄 추가/삭제 시점
- 주가 변동 데이터
- 인스타그램 같은 사이트 스크래핑 시 인플루언서/참여도 데이터
PhantomJS 사용의 단점으로는 다음과 같은 사항이 있습니다:
- 악의적인 세력이 자동화된 공격을 수행하는 데 활용될 수 있음(주로 사용자 인터페이스를 사용하지 않는다는 점 ‘덕분’에 해당)
- 전체 사이클/엔드투엔드 테스트 및 기능 테스트 시 때때로 까다로울 수 있음
단계별 PhantomJS 데이터 수집 가이드
PhantomJS는 NodeJS 개발자들 사이에서 널리 사용되므로 NodeJS 환경에서 사용하는 방법을 예시로 보여드립니다. 이 예시는 URL에서 HTML 콘텐츠를 가져오는 방법을 보여줍니다.
1단계: package.json 설정 및 npm 패키지 설치
프로젝트 폴더를 생성하고 그 안에 “package.json” 파일을 만듭니다.
{
"name": "phantomjs-example",
"version": "1.0.0",
"title": "PhantomJS 예제",
"description": "PhantomJS 예제",
"keywords": [
"phantom 예제"
],
"main": "./index.js",
"scripts": {
"inst": "rm -rf node_modules && rm package-lock.json && npm install",
"dev": "nodemon index.js"
},
"dependencies": {
"phantom": "^6.3.0"
}
}
그런 다음 터미널에서 다음 명령을 실행하세요: $ npm install. 이 명령은 Phantom을 로컬 프로젝트 폴더 “node_modules”에 설치합니다.
두 번째 단계: Phantom JS 스크립트 생성
JS 스크립트를 생성하고 “index.js”로 이름 지정합니다.
const phantom = require('phantom');
const main = async () => {
const instance = await phantom.create();
const page = await instance.createPage();
await page.on('onResourceRequested', function(requestData) {
console.info('Requesting', requestData.url);
});
const url = 'https://example.com/';
console.log('URL::', url);
const status = await page.open(url);
console.log('STATUS::', status);
const content = await page.property('content');
console.log('CONTENT::', content);
await instance.exit();
};
main().catch(console.log);
세 번째 단계: JS 스크립트 실행
스크립트를 시작하려면 터미널에서 다음 명령을 실행하세요: $ node index.js. 결과는 HTML 콘텐츠가 출력됩니다.

데이터 자동화: 수동 스크래핑보다 쉬운 대안
대규모 데이터 스크래핑과 관련하여 일부 기업은 PhantomJS 대안을 활용하는 것을 선호할 수 있습니다.
이러한 대안에는 다음이 포함됩니다.
- 프록시: 프록시를 이용한웹 스크래핑은 사용자가 대규모로 데이터를 수집하고 무제한의 동시 요청을 제출할 수 있게 해준다는 점에서 유용할 수 있습니다. 프록시는 또한 속도 제한이나 지리적 위치 기반 차단과 같은 대상 사이트의 차단 문제를 해결하는 데 도움이 될 수 있습니다. 이 경우, 기업은 국가/도시별 모바일 및 주거용 IP/장치를 활용하여 데이터 요청을 라우팅함으로써 더 정확한 사용자 대상 데이터(예: 경쟁사 가격, 광고 캠페인, Google 검색 결과)를 검색할 수 있습니다.
- 즉시 사용 가능한 데이터 세트: 데이터 세트는 본질적으로 이미 수집되어 알고리즘/팀에 즉시 전달될 준비가 된 ‘정보 패키지’입니다. 일반적으로 대상 사이트의 정보를 포함하며, 웹 전반의 관련 사이트(예: 여러 공급업체의 관련 카테고리 내 제품 정보, 다양한 이커머스 마켓플레이스)에서 보강된 데이터를 제공합니다. 데이터셋은 주기적으로 갱신되어 모든 데이터 포인트가 최신 상태를 유지할 수 있습니다. 여기서 주요 이점은 데이터 수집에 시간/자원을 전혀 투자하지 않아도 된다는 점으로, 데이터 분석과 고객 가치 창출에 더 많은 시간을 할애할 수 있습니다.
- 완전 자동화된 웹 스크레이퍼 API: 웹 스크레이퍼 API는 사용하기 쉬운, 코딩 불필요, 인프라 불필요, 맞춤형 데이터 수집 솔루션입니다. 소프트웨어 또는 하드웨어 개발 및 유지 관리의 번거로움 없이 기업이 구조화된 웹 데이터를 손쉽게 수집할 수 있게 합니다.
웹 스크래핑 요구사항에 가장 적합한 제품을 확인하려면 Bright Data 데이터 전문가와 상담하세요.