[node.js] Node.js로 HTML 페이지를 구문 분석하는 방법

많은 양의 HTML 페이지를 구문 분석 (서버 측)해야합니다.
우리 모두는 regexp가 여기에 갈 길이 아님에 동의합니다.
자바 스크립트가 HTML 페이지를 파싱하는 기본 방법 인 것 같지만 그 가정은 자바 스크립트가 브라우저 내부에 가지고있는 모든 DOM 기능을 가진 서버 측 코드에 의존합니다.

Node.js에 이러한 기능이 내장되어 있습니까?
서버 측에서 HTML을 구문 분석하는이 문제에 대한 더 나은 접근 방법이 있습니까?



답변

npm 모듈 jsdomhtmlparser 를 사용하여 Node.JS에서 DOM을 만들고 구문 분석 할 수 있습니다.

기타 옵션은 다음과 같습니다.

  • Python 용 BeautifulSoup
  • html을 xhtml 로 변환 하고 XSLT를 사용할 수 있습니다.
  • .NET 용 HTMLAgilityPack
  • .NET 용 CsQuery (내가 가장 좋아하는)
  • spidermonkey 및 rhino JS 엔진에는 기본 E4X 지원이 있습니다. 이것은 html을 xhtml로 변환하는 경우에만 유용 할 수 있습니다.

이 모든 옵션 중에서 표준 W3C DOM 접근 자 메서드를 사용하고 클라이언트와 서버 모두에서 코드를 재사용 할 수 있기 때문에 Node.js 옵션을 사용하는 것을 선호합니다. BeautifulSoup의 방법이 W3C dom과 더 비슷하기를 바라며, XSLT를 작성하기 위해 HTML을 XHTML로 변환하는 것은 단순한 가학 적이라고 생각합니다.


답변

Cheerio를 사용하십시오 . jsdom만큼 엄격하지 않으며 스크래핑에 최적화되어 있습니다. 보너스로 이미 알고있는 jQuery 선택기를 사용합니다.

❤ 익숙한 구문 : Cheerio는 핵심 jQuery의 하위 집합을 구현합니다. Cheerio는 jQuery 라이브러리에서 모든 DOM 불일치 및 브라우저 크랙을 제거하여 정말 멋진 API를 보여줍니다.

ϟ 매우 빠름 : Cheerio는 매우 간단하고 일관된 DOM 모델로 작동합니다. 결과적으로 구문 분석, 조작 및 렌더링이 매우 효율적입니다. 예비 엔드-투-엔드 벤치 마크에 따르면 cheerio는 JSDOM보다 약 8 배 빠릅니다.

❁ 엄청나게 유연함 : Cheerio는 @ FB55의 용서하는 htmlparser를 둘러 쌉니다. Cheerio는 거의 모든 HTML 또는 XML 문서를 구문 분석 할 수 있습니다.


답변

htmlparser2를 사용 하면 더 빠르고 간단합니다. 다음 사용 예를 참조하십시오.

https://www.npmjs.org/package/htmlparser2#usage

그리고 여기에 라이브 데모 :

http://demos.forbeslindesay.co.uk/htmlparser2/


답변

FB55의 Htmlparser2 가 좋은 대안 인 것 같습니다.


답변

jsdom은 실제 화면 스크래핑 작업을 수행하기에는 너무 엄격하지만, beautifulsoup은 나쁜 마크 업에 질식하지 않습니다.

node-soupselect 는 Python의 beautifulsoup을 nodejs로 포팅하고 아름답게 작동합니다.


답변