2011-12-02 1 views
6

웹 페이지에서 HTML 조각을 추출하고 해당 HTML 조각에 대한 특정 작업을 수행하는 효율적인 방법을 찾고 있습니다. 필요한HTML 파서 (org.htmlparser)를 사용하여 HTML 조각 추출 및 정리

작업은 다음과 같습니다 "숨겨진"

  • 의 클래스가

    1. 제거 모든 태그
    2. 모든 스타일 태그
    3. 모든 이벤트 속성 제거를 제거하는 모든 스크립트 태그 제거 (에 * = "*")
    4. 모든 스타일 속성 삭제

    나는이 작업을 위해 HTML Parser (org.htmlparser)을 사용해 왔지만 모든 요구 사항을 충족시킬 수 있었지만, 나는 우아한 해결책이 없다고 느낍니다. 현재, 나는 웹 페이지를 CssSelectorNodeFilter (파편을 얻으려면) 파싱하고 청소 작업을 수행하기 위해 NodeVisitor으로 그 파편을 다시 파싱합니다.

    아무도이 문제를 해결할 방법을 제안 할 수 있습니까? 문서를 한 번만 구문 분석하고 해당 구문을 분석하는 동안 모든 작업을 수행하는 것을 선호합니다.

    미리 감사드립니다.

  • 답변

    6

    체크 아웃 jsoup - 모든 필요한 작업을 우아하게 처리해야합니다.

    [편집]

    여기에 귀하의 필요한 작업에 따라 전체 작업 예제 :

    // Load and parse the document fragment. 
    File f = new File("myfile.html"); // See also Jsoup#parseBodyFragment(s) 
    Document doc = Jsoup.parse(f, "UTF-8", "http://example.com"); 
    
    // Remove all script and style elements and those of class "hidden". 
    doc.select("script, style, .hidden").remove(); 
    
    // Remove all style and event-handler attributes from all elements. 
    Elements all = doc.select("*"); 
    for (Element el : all) { 
        for (Attribute attr : el.attributes()) { 
        String attrKey = attr.getKey(); 
        if (attrKey.equals("style") || attrKey.startsWith("on")) { 
         el.removeAttr(attrKey); 
        } 
        } 
    } 
    // See also - doc.select("*").removeAttr("style"); 
    

    당신은 대소 문자 구분 등의 확인 일들이 속성 이름에 대한 문제가되지 않습니다 수 있도록 할 것입니다이 있지만, 이것은 당신이 필요로하는 것의 대부분이되어야합니다.

    +0

    나는 jsoup를 살펴볼 것이다. 내 문제를 해결할 수있는 더 나은 프레임 워크를 제공한다면 내 요구 사항에 대한 사용을지지하는 답변을 제출해야합니다. 팁 고마워. –

    +0

    @KieranHall : 실례로 업데이트 된 답변을 참조하십시오. – maerics

    +0

    속성을 제거한 후 리턴 문자열을 얻는 방법은 무엇입니까? –