문제

웹 사이트에서 데이터를 긁는 앱을 작업하고 있으며 데이터를 얻는 방법이 궁금합니다. 구체적으로 특정 CSS 클래스를 사용하는 여러 DIV 태그에 포함 된 데이터가 필요합니다 (현재 테스트 목적으로)

div class = "classname"

HTML의 각 라인에서 - 이것은 효과가 있지만 도움이 될 수는 없지만 더 나은 솔루션이 있다고 생각합니다.

HTML의 클래스 A 라인을 제공하고 다음과 같은 좋은 방법을 가질 수있는 좋은 방법이 있습니까?

boolean usesClass(String CSSClassname);
String getText();
String getLink();
도움이 되었습니까?

해결책

몇 년 전에 나는 같은 목적으로 JTIDY를 사용했습니다.

http://jtidy.sourceforge.net/

"JTIDY는 HTML Tidy, HTML 구문 검사기 및 예쁜 프린터의 Java 포트입니다. Java가 아닌 사촌과 마찬가지로 Jtidy는 기형 및 결함이있는 HTML을 청소하는 도구로 사용될 수 있습니다. 또한 JTIDY는 DOM 인터페이스를 제공합니다. 처리중인 문서는 JTIDY를 실제 HTML의 DOM 파서로 효과적으로 사용할 수있게합니다.

Jtidy는 Andy Quick이 작성했으며 나중에 관리자 위치에서 물러났습니다. 이제 JTIDY는 자원 봉사자 그룹에 의해 유지됩니다.

JTIDY에 대한 자세한 내용은 JTIDY SourceForge 프로젝트 페이지를 참조하십시오. "

다른 팁

HTML 처리에 유용 할 수있는 또 다른 라이브러리는 JSOUP입니다. JSOUP은 기형 HTML을 청소하려고 시도하고 TAG Selector Syntax와 같은 jQuery를 사용하여 Java에서 HTML 구문 분석을 허용합니다.

http://jsoup.org/

이전의 Coments에서 언급 한 주요 문제는 HTML 기형이므로 HTML 클리너 또는 HTML-XML 변환기가 필수입니다. 일단 XML 코드 (XHTML)를 얻으면 처리 할 도구가 많이 있습니다. 필요한 데이터 만 추출하거나 원본 코드를 수정할 수있는 트리 기반 방법 (Dom, JDO 등) 만 추출하는 간단한 색소폰 핸들러로 얻을 수 있습니다.

다음은 사용하는 샘플 코드입니다 HTML 클리너 특정 클래스를 사용하는 모든 div를 얻고 그 안에 모든 텍스트 내용을 인쇄하려면.

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;

/**
 * @author Fernando Miguélez Palomo <fernandoDOTmiguelezATgmailDOTcom>
 */
public class TestHtmlParse
{
    static final String className = "tags";
    static final String url = "http://www.stackoverflow.com";

    TagNode rootNode;

    public TestHtmlParse(URL htmlPage) throws IOException
    {
        HtmlCleaner cleaner = new HtmlCleaner();
        rootNode = cleaner.clean(htmlPage);
    }

    List getDivsByClass(String CSSClassname)
    {
        List divList = new ArrayList();

        TagNode divElements[] = rootNode.getElementsByName("div", true);
        for (int i = 0; divElements != null && i < divElements.length; i++)
        {
            String classType = divElements[i].getAttributeByName("class");
            if (classType != null && classType.equals(CSSClassname))
            {
                divList.add(divElements[i]);
            }
        }

        return divList;
    }

    public static void main(String[] args)
    {
        try
        {
            TestHtmlParse thp = new TestHtmlParse(new URL(url));

            List divs = thp.getDivsByClass(className);
            System.out.println("*** Text of DIVs with class '"+className+"' at '"+url+"' ***");
            for (Iterator iterator = divs.iterator(); iterator.hasNext();)
            {
                TagNode divElement = (TagNode) iterator.next();
                System.out.println("Text child nodes of DIV: " + divElement.getText().toString());
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

당신은 관심을 가질 수 있습니다 tagsoup, 기형 HTML을 처리 할 수있는 Java HTML 파서. XML 파서는 잘 형성된 XHTML에서만 작동합니다.

htmlparser 프로젝트 (http://htmlparser.sourceforge.net/) 가능성이있을 수 있습니다. 기형 HTML을 처리하는 데 꽤 괜찮은 것 같습니다. 다음 스 니펫은 필요한 작업을 수행해야합니다.

Parser parser = new Parser(htmlInput);
CssSelectorNodeFilter cssFilter = 
    new CssSelectorNodeFilter("DIV.targetClassName");
NodeList nodes = parser.parse(cssFilter);

여리고: http://jericho.htmlparser.net/docs/index.html

사용하기 쉽고, 잘 형성되지 않은 HTML, 많은 예제를 지원합니다.

htmlunit은 도움이 될 수 있습니다. 그것은 훨씬 더 많은 일을합니다.

http://htmlunit.sourceforge.net/1

잊지 말자 실내 변기, Java의 jQuery : HTML 문서 구문 분석, 가로 지르기 및 조작을 단순화하는 빠르고 간결한 Java 라이브러리; CSS3 선택기의 사용이 포함되어 있습니다.

예시:

Jerry doc = jerry(html);
doc.$("div#jodd p.neat").css("color", "red").addClass("ohmy");

예시:

doc.form("#myform", new JerryFormHandler() {
    public void onForm(Jerry form, Map<String, String[]> parameters) {
        // process form and parameters
    }
});

물론, 이것들은 그것이 어떻게 보이는지 느낌을 얻는 빠른 예일뿐입니다.

그만큼 nu.validator Project는 코너의 정확성을 차단하지 않는 우수하고 고성능 HTML 파서입니다.

Validator.nu HTML 파서는 Java에서 HTML5 구문 분석 알고리즘을 구현 한 것입니다. 파서는 XML 파서를 사용하여 XHTML 1.X 컨텐츠를 이미 지원하고 SAX, DOM 또는 XOM을 사용하여 파서와 인터페이스하는 응용 프로그램에서 XML 파서를위한 드롭 인 교체로 작동하도록 설계되었습니다. 스크립팅을 통해 자체 IO 및 지원 Document.Write ()를 수행하려는 응용 프로그램에는 저수준 기능이 제공됩니다. Parser Core는 Google 웹 툴킷에서 컴파일되며 자동으로 C ++로 변환 될 수 있습니다. (C ++ 번역 기능은 현재 Gecko에서 사용할 파서를 포팅하는 데 사용됩니다.)

당신은 또한 사용할 수 있습니다 Xwiki HTML 클리너:

사용합니다 htmlcleaner 유효한 XHTML 1.1 컨텐츠를 생성하도록 확장합니다.

HTML이 잘 구성되어 있다면 XML 파서를 쉽게 사용하여 작업을 수행 할 수 있습니다. 색소폰 이상적입니다.

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