Node.js의 HTML 파서


198

nodejs 에 Ruby의 nokogiri 와 같은 것이 있습니까? 사용자 친화적 인 HTML 파서를 의미합니다.

Node.js 모듈 페이지에서 일부 파서를 보았지만 예쁘고 신선한 것을 찾을 수 없습니다.


3
"친절하다"는 무슨 뜻입니까? Nokogiri의 XPath 및 CSS 선택기 지원과 같은 노드로 작업하고 선택하는 것이 편리합니까? 잘못된 "태그 수프"HTML을 구문 분석 할 수 있습니까?
Phrogz

jQuery에 익숙하다면 이 답변을 고려 하십시오 .
Lucio Paiva

답변:


446

DOM 을 빌드 하려면 jsdom 을 사용할 수 있습니다 .

또한 cheerio 가 있으며 jQuery 인터페이스가 있으며 이전 버전의 jsdom보다 훨씬 빠르지 만 요즘에는 성능이 비슷합니다.

스트리밍 파서 인 htmlparser2를 살펴보고 싶을 것입니다. 벤치 마크에 따르면 다른 브라우저 보다 빠르며 기본적으로 DOM이없는 것 같습니다. DOM을 생성하는 핸들러와 함께 제공되기 때문에 DOM을 생성 할 수도 있습니다. 이것은 cheerio가 사용하는 파서입니다.

parse5 도 좋은 해결책처럼 보입니다. WHATWG를 준수하며 (이 업데이트 시점 의 마지막 커밋 이후 11 일) 상당히 활동적이며 jsdom , AngularPolymer에서 사용 됩니다.

웹 스크랩을 위해 HTML을 구문 분석 하려면 YQL 1을 사용할 수 있습니다 . 이 노드 모듈 그것을 위해가. YQL HTML이 정적 웹 사이트에서 온 경우 자신의 코드와 처리 능력이 아닌 서비스에 의존하기 때문에 최상의 솔루션이라고 생각 합니다. 웹 사이트의 robot.txt에서 페이지를 허용하지 않으면 작동하지 않지만 YQL은 작동하지 않습니다.

긁어 모으려 는 웹 사이트가 동적 인 경우 phantomjs 와 같은 헤드리스 브라우저를 사용해야 합니다. phantomjs를 고려하고 있다면 casperjs도 살펴 보십시오. 그리고 SpookyJS를 사용하여 노드에서 casperjs를 제어 할 수 있습니다 .

phantomjs 옆에있다 zombiejs을 . nodejs에 포함 할 수없는 phantomjs와 달리 zombiejs는 노드 모듈 일뿐입니다.

후자의 솔루션 에는 nettuts +가 있습니다.


(1) 8 월 2014 년 이후, YQL에 대한 요구 사항입니다 YUI 라이브러리는 더 이상 적극적으로 유지하지 소스


1
htmlparser2와 함께 제공되는 DomHandler 모듈을 사용하여 htmlparser2에서 DOM을 가져올 수 있습니다. DOM을 작성하는 오버 헤드없이 다른 종류의 HTML 처리를 허용하기 위해 의도적으로 분리되어 있습니다.
esp

@esp 감사합니다. 비표준 DOM이라고 생각하기 전에 그 섹션을 적절하게 변경했습니다.
Farid Nouri Neshat

크롤링을 위해 YQL을 어떻게 사용하는지 잘 모르겠습니다. 마크 업을 처리하지 않는 웹 서비스 결과에 참여하는 것이 좋습니다.
dardenfall

@dardenfall 맞습니다. 크롤링은 올바른 용어가 아닙니다. 나는 그것을 긁어와 함께 변경 :)
Farid Nouri Neshat 4

@Farid-댓글에 토론 할 위험이 있습니다 (죄송합니다!). 스크래핑에 어떻게 사용하는지 여전히 알 수 없습니다. 사이트가 아닌 웹 서비스 와 wservices에서 작동하며 거의 html을 파싱하지 않습니다. xml 일 수 있지만 html 일 수는 없습니다.
dardenfall


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.