문제

HTML 민첩성 팩 에 대한 답변으로 주어졌습니다. StackOverflow 질문 얼마 전만해도 여전히 최선의 선택입니까?고려해야 할 다른 옵션은 무엇입니까?좀 더 가벼운 게 있을까요?

도움이 되었습니까?

해결책

이있다 스프레드 시트 비교와 함께.

요약해서 말하자면:

CSQuery 성능 vs. HTML 민첩성 팩 및 Fizzler 나는 CSQuery를 내가 아는 유일한 실용적인 대안과 비교하기 위해 성능 테스트를 구성했습니다 (Fizzler, HtmlagilityPack 확장). 세 가지 다른 문서에 대해 테스트했습니다.

  • 지글 지글 테스트 문서 (약 11k)
  • "치즈"(약 170k)의 Wikipedia 항목
  • 단일 페이지 HTML 5 사양 (약 6 메가 바이트)

전체 결과는 다음과 같습니다.

  • HAP는 HTML 문자열을 객체 모델에로드 할 때 더 빠릅니다. Fizzler가 색인을 구축한다고 생각하지 않기 때문에 이것은 의미가 있습니다 (또는 아마도 비교적 단순한 것만 구축 할 수 있습니다). CSQuery는 문서를로드하는 데 1.1에서 2.6 배 더 걸립니다. 아래에 더 자세히 설명합니다.
  • CSQuery는 거의 모든 것에 대해 더 빠릅니다. 때로는 10,000 개 이상의 요인에 의해. 한 가지 예외는 "*"선택기이며 때로는 피즐러가 더 빠릅니다. 모든 테스트의 경우 결과가 완전히 열거됩니다. 이 케이스는 트리의 모든 노드가 열거되는 결과를 초래합니다. 따라서 이것은 데이터 구조만큼 선택 엔진을 테스트하지 않습니다.
  • CSQuery는 브라우저와 동일한 결과를 반환하는 데 더 나은 일을했습니다. 여기의 각 선택기는 jQuery 1.7.2를 사용하여 Chrome의 동일한 문서에 대해 확인되었으며 숫자는 CSQuery에 의해 반환 된 것과 일치합니다. htmlagilitypack이 선택 사항 (누락) 태그를 다르게 처리하기 때문일 수 있습니다. 또한 Nth -Child는 Fizzler에서 완전히 구현되지 않으며 간단한 값 (공식이 아닌) 만 지원합니다.

다른 팁

HTML 파싱과 관련하여 실제와 비교할 수는 없습니다. 이것은 c# validator.nu의 포트 파서. 이것은 Gecko 기반 브라우저 (예 : Firefox)에서 사용하는 것과 동일한 코드 기반입니다. 저장소는 약간 먼지가 많지만 속지 마십시오. 항구는 뛰어납니다. 방금 간과되었습니다. 나는 그것을 통합했다 csquery 약 한 달전. 모든 CSQuery 테스트 (C#에 포팅 된 대부분의 jQuery 및 Sizzle 테스트를 포함)를 통과합니다.

C#로 작성된 다른 HTML5 파서 또는 누락, 선택 사항 및 유효하지 않은 태그 처리 측면에서 좋은 일을하는 데 원격으로 가깝게 나오는 다른 HTML5 파서는 알지 못합니다. 이것은 단지 훌륭한 일을하는 것이 아니라 표준을 준수합니다.

위에 링크 한 repo는 원래 포트이며 XML 노드 트리를 생성하는 기본 래퍼가 포함되어 있습니다. CSQuery 버전 1.3 이상이 파서를 사용합니다.

도 있습니다 앵글 션

Anglesharp는 HTML, SVG 및 MathML과 같은 각도 기반 하이퍼 텍스트를 구문 분석 할 수있는 .NET 라이브러리입니다. 유효성 검사가없는 XML도 라이브러리에서 지원됩니다. Anglesharp의 중요한 측면은 CSS를 구문 분석 할 수 있다는 것입니다. 파서는 공식 W3C 사양을 기반으로합니다. 이것은 주어진 소스 코드의 완벽하게 휴대용 HTML5 DOM 표현을 생성합니다. 또한 QuerySelector 또는 QuerySelectorALL과 같은 현재 기능도 트리 트래버스를위한 작업입니다.

Html Agility Pack은 얼마 전 StackOverflow 질문에 대한 답변으로 제공되었습니다.

Html Agility Pack은 여전히 ​​HTML 구문 분석을 위한 뛰어난 솔루션입니다.

아직도 그거야? 최상의 옵션?

최상의?글쎄, 모든 것은 당면한 작업에 따라 다르지만 일반적으로 나는 그렇게 생각합니다.이상적이지는 못한 경우가 있지만 일반적으로 훌륭한 작업을 수행합니다.

좀 더 가벼운 게 있을까요?

다음을 시도해 볼 수 있습니다. http://csharptest.net/browse/src/Library/Html/이는 Regex를 통해 HTML/XML을 분리하는 소스 파일로 가득 찬 것에 지나지 않습니다.경량 DOM 및 XPath를 지원하지만 그 외에는 많지 않습니다.(도움말 내용)

[예]

public void TestParse() {
        string notxml = "<html id=a ><body foo='bar' bar=\"foo\" />";
        var html = new HtmlLightDocument(notxml).Root;

        Assert.AreEqual("html", html.TagName);
        Assert.AreEqual(1, html.Attributes.Count);
        Assert.AreEqual("a", html.Attributes["id"]);
        Assert.AreEqual(1, html.Children.Count);
}

또는 DOM 트리를 구축하는 대신 파서를 직접 사용할 수도 있습니다.그냥 구현 IXmlLightReader 인터페이스, 정적 호출 XmlLightParser.Parse 방법.

추신:내부 토론을 해결하기 위해 작성되었습니다.그 정규식 ~할 수 있다 HTML을 파싱하세요!그 이후로 우리는 어디에나 삽입할 수 있을 만큼 가볍기 때문에 실제로 많은 용도를 찾았습니다.DOM 계층 구조 빌더를 혼동할 수 있는 방법이 여전히 있지만 파서가 처리하지 못하는 HTML을 찾지 못했습니다.

나는 이것을 전에 사용했지만, 흐름하기 쉬운 API. C#/. Net 도메인에서 이것은 매우 좋은 선택이라고 생각합니다.

Java 라이브러리가 있습니다 여기. 개인적인 경험이 없지만 꽤 좋아 보입니다.

최고의 것은 매우 상대적인 용어입니다. 귀하의 질문에 대해서는 신뢰할 수있는 도구를 찾고 있다고 생각합니다. 따라서이 기능을 고려해야한다고 생각합니다. 도구를 제공하는 회사의 지원과 강점을 찾을 것입니다. 사용하는 도구에 대한 지원에 연락하려고 할 때 끔찍한 느낌입니다. 답변은 더 이상 존재하지 않습니다. 개발자 커뮤니티가 HAP를 유지함에 따라 오히려 그녀를 신뢰할 것입니다.

밖에서 볼 준비가된다면 .NET 세상, Python 커뮤니티는 추천합니다 아름다운 수프, 예를 들어 HTML-Parser-in-Python.

아름다운 수프는 화면 스크래핑과 같은 빠른 처리 프로젝트를 위해 설계된 파이썬 HTML/XML 파서입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top