JavaRush /Java Blog /Random-KO /Jsoup을 사용하여 Java에서 HTML 파일을 구문 분석하는 방법에 대한 3가지 예
Sdu
레벨 17

Jsoup을 사용하여 Java에서 HTML 파일을 구문 분석하는 방법에 대한 3가지 예

Random-KO 그룹에 게시되었습니다
Jsoup을 사용하여 Java에서 HTML 파일을 구문 분석하는 방법에 대한 3가지 예 - 1HTML은 웹의 핵심입니다. JavaScript, JSP, PHP, ASP 또는 기타 웹 기술을 사용하여 동적으로 생성되었는지 여부에 관계없이 여러분이 보는 모든 인터넷 페이지는 HTML을 기반으로 합니다. 실제로 브라우저는 HTML을 구문 분석하여 사용자에게 편리한 방식으로 표시합니다. 그러나 HTML 문서를 구문 분석하고 그 안에 있는 일부 요소, 태그, 속성을 찾거나 Java 프로그램을 사용하여 특정 요소가 존재하는지 여부를 확인해야 하는 경우에는 어떻게 해야 합니까? 몇 년 동안 Java 프로그래머였다면 DOM이나 SAX와 같은 파서를 사용하여 XML 구문 분석을 수행했을 것이라고 확신합니다. 그러나 아이러니하게도 서블릿과 기타 Java 웹 기술이 포함되지 않은 기본 Java 애플리케이션에서 HTML 문서를 구문 분석해야 하는 경우가 있습니다. 게다가 Core JDK에는 HTTP 또는 HTML 라이브러리도 포함되어 있지 않습니다. 그렇기 때문에 HTML 파일을 구문 분석할 때 많은 Java 프로그래머가 Java에서 HTML 태그 값을 얻는 방법을 Google에 문의합니다. 이 내용을 접했을 때 솔루션은 내가 필요한 기능을 구현한 오픈 소스 라이브러리일 것이라고 확신했지만, 그것이 Jsoup만큼 훌륭하고 기능이 풍부할 줄은 몰랐습니다. JQuery 스타일의 HTML 파일, 속성, CSS 클래스를 읽고 구문 분석하는 기능을 지원할 뿐만 아니라 동시에 이를 수정할 수도 있습니다. Jsoup를 사용하면 HTML 문서로 원하는 모든 작업을 수행할 수 있습니다. 이 기사에서는 HTML 파일을 구문 분석하고 태그의 이름과 속성을 찾습니다. 또한 Google 홈 페이지와 같은 URL과 파일에서 HTML을 다운로드하고 구문 분석하는 예도 살펴보겠습니다.

Jsoup은 무엇입니까?

Jsoup은 실제 HTML 작업을 위한 오픈 소스 Java 라이브러리입니다. 최고의 DOM, CSS 및 jQuery와 유사한 기술을 사용하여 데이터를 검색하고 조작하기 위한 매우 편리한 API를 제공합니다. Jsoup는 WHATWG HTML5 사양을 구현하고 HTML을 Chrome 및 Firefox와 같은 최신 브라우저와 동일한 DOM으로 구문 분석합니다. 다음은 Jsoup 라이브러리의 유용한 기능 중 일부입니다.
  • Jsoup는 URL, 파일 또는 문자열에서 HTML을 스크랩하고 구문 분석할 수 있습니다.
  • Jsoup은 DOM 순회 또는 CSS 선택기를 사용하여 데이터를 찾고 추출할 수 있습니다.
  • Jsoup을 사용하면 HTML 요소, 속성 및 텍스트를 조작할 수 있습니다.
  • Jsoup은 XSS 공격을 방지하기 위해 사용자 제공 정보에 대한 화이트리스트 정리 기능을 제공합니다.
  • Jsoup은 또한 "깔끔한" HTML을 생성합니다.
Jsoup은 불완전하고 검증되지 않은 태그 세트가 있는 적절하게 검증된 HTML을 포함하여 현실 세계에 존재하는 다양한 종류의 HTML과 작동하도록 설계되었습니다. Jsoup의 주요 장점 중 하나는 신뢰성입니다.

Jsoup을 사용하여 Java에서 HTML 구문 분석

이 튜토리얼에서는 Jsoup을 사용하여 Java에서 HTML 문서를 구문 분석하고 탐색하는 세 가지 다른 예를 살펴보겠습니다. 첫 번째 예에서는 Java 문자열 리터럴 형식의 태그가 포함된 HTML 문자열을 구문 분석합니다. 두 번째 예에서는 인터넷에서 HTML 문서를 다운로드하고, 세 번째 예에서는 구문 분석을 위해 자체 샘플 HTML 파일 login.html을 다운로드합니다. 이 파일은 HTML 양식이 포함된 "body" 섹션의 "title" 태그와 "div" 태그로 구성된 샘플 HTML 문서입니다. 양식에는 사용자 이름과 비밀번호를 입력하는 필드와 추가 작업을 위한 재설정 및 확인 버튼이 포함되어 있습니다. 이는 "유효성" 검사를 통과할 수 있는 "올바른" HTML입니다. 즉, 모든 태그와 속성이 제대로 닫혀 있음을 의미합니다. HTML 파일은 다음과 같습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
Jsoup을 사용하면 HTML을 구문 분석하는 것이 매우 쉽습니다. 정적 메서드를 호출 Jsoup.parse()하고 HTML 문자열을 전달하기만 하면 됩니다. Jsoup은 parse()문자열, 파일, 기본 URI, URL 및 InputStream. UTF-8 형식이 아닌 경우 HTML 파일을 올바르게 읽을 수 있도록 인코딩을 지정할 수도 있습니다. 이 메소드는 parse(String html)수신 HTML을 새 객체로 구문 분석합니다 Document. Jsoup에서 클래스는 클래스를 확장하는 Document클래스에서 상속됩니다 . 클래스는 또한 class 에서 상속됩니다 . null이 아닌 문자열을 메서드에 전달하는 한, 적어도 "head" 및 "body" 요소를 포함하는 개체에 대한 성공적이고 의미 있는 구문 분석이 보장됩니다 . 객체가 있는 경우 클래스 와 해당 부모 및 의 적절한 메서드를 호출하여 원하는 데이터를 얻을 수 있습니다 . ElementNodeNodeTextNodeDocumentDocumentDocumentElementNode

HTML 문서를 구문 분석하는 Java 프로그램

다음은 HTML 문자열, 인터넷에서 다운로드한 HTML 파일 및 로컬 HTML 파일을 구문 분석하는 완전한 프로그램입니다. 이를 실행하려면 IDE(Eclipse 또는 기타) 또는 명령줄을 사용할 수 있습니다. Eclipse에서는 이 작업이 매우 쉽습니다. 이 코드를 복사하고 새 Java 프로젝트를 만든 다음 "src" 폴더를 마우스 오른쪽 버튼으로 클릭하고 복사한 코드를 붙여넣으면 됩니다. Eclipse는 적절한 이름을 가진 적절한 패키지와 소스 코드 파일을 생성하므로 작업이 훨씬 줄어듭니다. 이미 Java 프로젝트가 있다면 이는 단지 한 단계일 뿐입니다. 아래 프로그램은 HTML 파일을 구문 분석하고 탐색하는 세 가지 예를 보여줍니다. 첫 번째 예에서는 HTML이 포함된 문자열을 직접 구문 분석하고, 두 번째 예에서는 URL에서 다운로드한 HTML 파일을, 세 번째 예에서는 로컬 파일 시스템에서 HTML 문서를 다운로드하여 구문 분석합니다.
import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
산출:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Jsoup HTML 파서는 형식이 올바른지 여부에 관계없이 사용자가 제공한 HTML의 "깨끗한" 구문 분석을 생성하기 위해 모든 노력을 기울일 것입니다. 다음 오류를 처리할 수 있습니다.
  • 닫히지 않은 태그. 예를 들어,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • 암시적 태그. 예를 들어, 열린 것은 <td>Java is Great</td>포장됩니다.<table><tr><td>
  • Jsoup은 강력한 문서 구조를 만듭니다(HTML에는 머리글과 본문이 포함되어 있지만 본문에는 관련 요소만 포함되어 있음).
Jsoup는 html 문서, 본문 조각, html 문자열을 읽고 html 웹 콘텐츠를 직접 구문 분석하는 작업을 매우 간단하게 만들어주는 훌륭하고 안정적인 오픈 소스 라이브러리입니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION