JSDOMCrawler 가이드
JSDOMCrawler
는 Window API를 활용한 스크래핑에 매우 유용합니다.
크롤러의 작동 방식
JSDOMCrawler
는 특별히 설계된 got-scraping HTTP 클라이언트를 사용하여 지정된 URL에 HTTP 요청을 보내는 방식으로 작동합니다. URL들은 RequestQueue
를 통해 크롤러에 전달됩니다. 받아오는 HTTP 응답은 주로 HTML 페이지입니다. 브라우저에서 URL을 처음 로드할 때 받는 것과 동일한 페이지를 가져옵니다. additionalMimeTypes
옵션을 사용하면 다양한 컨텐츠 타입도 처리할 수 있습니다.
최신 웹페이지들은 대부분 첫 HTML 응답에 모든 컨텐츠를 포함하지 않습니다. 대신 첫 HTML에는 CSS와 JavaScript 같은 다른 리소스들의 링크가 포함되어 있어, 이들이 나중에 다운로드되어 최종 페이지를 구성하게 됩니다. 이러한 페이지들을 크롤링하려면 PuppeteerCrawler
나 PlaywrightCrawler
를 사용하세요.
HTML을 가져오면 크롤러는 이를 JSDOM에 전달하여 파싱합니다. 그 결과로 프론트엔드 개발자들에게 친숙한 window
객체를 얻게 됩니다. Window API를 사용하여 페이지의 HTML을 다양하게 조작할 수 있지만, 스크래핑에서는 주로 특정 HTML 요소를 찾고 데이터를 추출하는 데 사용됩니다.
브라우저 JavaScript 사용 예시:
// 페이지 제목 가져오기
document.title; // 브라우저에서
window.document.title; // JSDOM에서
JSDOMCrawler 사용이 적합한 경우
JSDOMCrawler
는 CheerioCrawler
의 기능만으로는 부족할 때 진가를 발휘합니다. Web API의 모든 기능을 활용할 수 있습니다!
장점:
- 설정이 간단함
- 프론트엔드 개발자에게 친숙함
- 컨텐츠 조작 가능
- 일부 안티 스크래핑 차단을 자동으로 회피
단점:
CheerioCrawler
보다 속도가 느림- JavaScript 렌더링이 필요한 웹사이트에서는 작동하지 않음
- 대상 웹사이트에 과도한 요청을 보낼 수 있음
Element API 사용 예시
페이지의 모든 링크 찾기
다음 코드는 href
속성이 있는 모든 <a>
요소를 찾아 href 값들을 배열로 추출합니다.
Array.from(document.querySelectorAll('a[href]')).map((a) => a.href);
기타 예시
예제 섹션에서 JSDOMCrawler
사용 예시들을 더 확인할 수 있습니다. 대부분의 예제에서 JSDOMCrawler
코드를 확인하실 수 있습니다.