Node js에는 cheerio라는 라이브러리가 있다. 이 라이브러리는 HTTP통신을 해서 데이터를 가져오는 기능을 포함하고 있지 않다. HTML문서를 문자열로 cheerio에 집어 넣어주면 jQuery 및 쿼리 셀렉터의 선택자 형식으로 데이터를 추출할 수 있도록 도와주는 라이브러리이다.
HTTP 통신으로 데이터를 가져오고 싶다면 자바스크립트의 기본 라이브러리인 XMR(XMLHttpRequest)을 이용하거나 node js 라이브러리인 request 또는 request-promise 라이브러리를 이용하여 HTTP 통신의 Response 결과를 받아 온 다음 response 결과 중에서 HTML 문서를 cheerio에 로딩시켜 줘야 한다.
Cheerio와 같은 HTML 문서 파싱 라이브러리를 사용하지 않는다면 정규식으로 매번 필요한 값을 문서에서 찾아야 하기 때문에 생산성 향상에 여러모로 불리 할 수 있다.
Cheerio를 사용하다 보면 Node js 다른 크롤러 도구인 puppeteer, SpookyJS등을 접할 기회가 생길 수도 있다. 이들 도구는 가상 브라우저를 실행시킨 뒤 가상 브라우저 안에 띄운 웹 사이트를 컨트롤 하는 도구이다.
SpookyJS는 유명 가상 브라우저인 nightmare js를 기반으로 만들어진 node js 라이브러리이다. nightmare js는 독립적으로 실행되는 가상 브라우저이므로 node js 프로젝트와 같이 사용할 경우 충돌이 생기므로 SpookyJS라는 라이브러리를 사용해서 실행해야 한다. 또한 nightmare js는 지원이 끝난지 오래되었으며 한번에 하나의 텝만을 실행할 수 있다는 제약이 있다.
그래서 node js에서는 puppeteer이라는 가상 브라우저를 더 많이 활용한다. 가상 웹 브라우저를 띄우는 것은 다양한 웹 환경에서 특히 자바스크립트로 돔 렌더링이 되고 난 결과 값을 크롤하거나 웹 페이지의 스크린 샷을 찍는 기능을 제공하기 때문에 유용하다. 그러나 Cheerio를 이용하는 것이 puppeteer을 이용하는 것 보다 5배 이상 빠른 속도를 보여준다는 벤치마크가 있었다. 가상 브라우저가 제공하는 기능을 활용할 일이 없고 빠른 속도를 원한다면 Cheerio와 request-promise를 조합해서 사용하도록 하자.
it took Puppeteer about 10 minutes to finish scraping a 1000 upvoters. I then rewrote the Twitter bot in Cheerio (as described above) and saw a performance boost of around 5X+ : The new code took about 2 minutes (or less) to finish scraping. (https://tshaped.io/javascript-scraping-for-marketers-cheerio-and-puppeteer/)
'node js' 카테고리의 다른 글
Mac에서 Node.js 버전 관리하기 (nodebrew를 사용) (0) | 2019.09.03 |
---|