어떤 HTML 파서가 최고입니까? [닫은]


194

나는 많은 파서를 코딩한다. 지금까지 파싱 및 브라우저 자동화를 위해 HtmlUnit 헤드리스 브라우저를 사용하고있었습니다.

이제 두 작업을 분리하고 싶습니다.

내 작업의 80 %가 구문 분석과 관련되어 있기 때문에 HtmlUnit에서 페이지를 먼저로드 한 다음 소스를 가져 와서 구문 분석하는 데 많은 시간이 걸리기 때문에 간단한 HTML 파서를 사용하고 싶습니다.

어떤 HTML 파서가 가장 좋은지 알고 싶습니다. 파서가 HtmlUnit 파서에 가까울수록 더 좋습니다.


편집하다:

기껏해야 최소한 다음 기능을 원합니다.

  1. 속도
  2. "id"또는 "name"또는 "tag type"으로 HtmlElement를 쉽게 찾을 수 있습니다.

더러운 HTML 코드를 청소하지 않으면 괜찮습니다. HTML 소스를 정리할 필요가 없습니다. HtmlElements를 이동하고 데이터를 수집하는 가장 쉬운 방법이 필요합니다.


2
"최고"를 어떻게 의미합니까? 속도, 현재 구현에서의 전환 용이성, W3C 표준 준수, 내가 생각하지 않은 다른 것을 의미합니까? 귀하의 질문은 속도를 의미하지만 개발 전환 시간도 암시합니다. 일부 설명은 귀하의 요구에 더 잘 맞는 좋은 파서를 추천하는 데 도움이 될 수 있습니다.
aperkins

2
'나는 많은 파서를 코딩한다'는 당신의 진술은 그 질문과 관련이없는 것 같습니다. 'html 파서를 많이 사용해야합니까?'
비어

11
나는이 질문이 "건설적이지 않은"가까운 이유에서 면제 될 정도로 구체적이라고 생각합니다.
Bill the Lizard

9
이것을 다시 열도록 투표하십시오. 이것은 구체적이며 닫혀서는 안됩니다.
AZ_

3
그렇습니다. 그래서 일부 사람들은 "최고의"질문에 대한 거룩한 전쟁에 대항하여 거룩한 전쟁을 벌입니다. 너무 짜증나. 답변 투표는이 질문의 유용성을 명확하게 나타냅니다.
user1050755

답변:


396

자체 플러그 : 방금 새로운 Java HTML 파서를 출시했습니다 : jsoup . 나는 그것이 당신이 후에 할 일을 할 것이라고 생각하기 때문에 여기에 언급합니다.

파티 트릭은 다음과 같은 요소를 찾기위한 CSS 선택기 구문입니다.

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

자세한 정보는 Selector javadoc을 참조하십시오.

이것은 새로운 프로젝트이므로 개선을위한 아이디어는 매우 환영합니다!


15
이것은 환상적이며 CSS 선택기 지원을 좋아합니다. Java 라이브러리를 사용하고 있다는 것을 거의 알지 못합니다. :-)
William Pietri

17
이 지원을 중단하지 마십시오. 이것이 바로 서버 측 Java를 사용하여 HTML을 구문 분석하는 데 필요한 것입니다! 대단해! 몇 시간 만에 프록시를 작성하여 모든 src 및 href 링크를 수정하여 원래 서버로의 전체 경로를 만들었습니다.
jmort253

7
방금 살펴 봤습니다. 나는 그것의 인터페이스와 문서를 좋아한다. 이해하기 쉽습니다. :)
emeraldhieu

5
좋은 작업! jsoup을 10 분 이내에 실행했습니다.
Indrek Kõue

10
믿어지지 않는, 이것은 너무 아파요. 몇 분 안에 HTML 페이지를 처리 ​​할 수있었습니다. 이 위대한 일에 너무 감사합니다.
Michael-O

32

지금까지 본 최고의 것은 HtmlCleaner입니다 .

HtmlCleaner는 Java로 작성된 오픈 소스 HTML 파서입니다. 웹에서 발견되는 HTML은 일반적으로 더럽고 형식이 잘못되어 추가 처리에 적합하지 않습니다. 그러한 문서를 심각하게 소비하려면 먼저 엉망을 정리하고 태그, 속성 및 일반 텍스트로 순서를 가져와야합니다. 주어진 HTML 문서에서 HtmlCleaner는 개별 요소를 재정렬하고 올바른 형식의 XML을 생성합니다. 기본적으로 대부분의 웹 브라우저가 문서 객체 모델을 만들기 위해 사용하는 유사한 규칙을 따릅니다. 그러나 사용자는 태그 필터링 및 균형 조정을위한 사용자 정의 태그 및 규칙 세트를 제공 할 수 있습니다.

HtmlCleaner를 사용하면 XPath를 사용하여 모든 요소를 ​​찾을 수 있습니다.

다른 HTML 파서는 이 SO 질문을 참조하십시오 .


1
프록시를 직접 처리 한 다음 HtmlCleaner를 사용하여 스트림을 대신 처리해야합니다. => 편리하지 않습니다. T__T
kidnan1991

HTMLTidy가 더 나은 옵션이 아닐까요? html-tidy.org
Troy Witthoeft

1
Similar rules that the most of web browsers use-이것은 매우 설득력이 없습니다
pguardiario

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