JavaRush /จาวาบล็อก /Random-TH /3 ตัวอย่างวิธีแยกวิเคราะห์ไฟล์ HTML ใน Java โดยใช้ Jsoup
Sdu
ระดับ

3 ตัวอย่างวิธีแยกวิเคราะห์ไฟล์ HTML ใน Java โดยใช้ Jsoup

เผยแพร่ในกลุ่ม
3 ตัวอย่างวิธีแยกวิเคราะห์ไฟล์ HTML ใน Java โดยใช้ Jsoup - 1HTML เป็นแกนหลักของเว็บ หน้าอินเทอร์เน็ตทั้งหมดที่คุณเห็น ไม่ว่าจะสร้างแบบไดนามิกโดยใช้ JavaScript, JSP, PHP, ASP หรือเทคโนโลยีเว็บอื่น ๆ ก็ตามจะขึ้นอยู่กับ HTML ที่จริงแล้ว เบราว์เซอร์ของคุณจะแยกวิเคราะห์ HTML และแสดงในลักษณะที่สะดวกสำหรับคุณ แต่ถ้าคุณต้องการแยกวิเคราะห์เอกสาร HTML และค้นหาองค์ประกอบ แท็ก คุณลักษณะในนั้น หรือตรวจสอบว่ามีองค์ประกอบเฉพาะอยู่หรือไม่โดยใช้โปรแกรม Java หากคุณเป็นโปรแกรมเมอร์ Java มาหลายปีแล้ว ฉันแน่ใจว่าคุณคงจะทำการแยกวิเคราะห์ XML โดยใช้ parsers เช่น DOM หรือ SAX แต่น่าแปลกที่บางครั้งคุณจำเป็นต้องแยกวิเคราะห์เอกสาร HTML จากแอปพลิเคชัน Java พื้นฐานที่ไม่มี Servlets และเทคโนโลยีเว็บ Java อื่นๆ นอกจากนี้ Core JDK ยังไม่มีไลบรารี HTTP หรือ HTML นั่นเป็นสาเหตุว่าทำไมเมื่อพูดถึงการแยกวิเคราะห์ไฟล์ HTML โปรแกรมเมอร์ Java จำนวนมากจึงถาม Google ว่าจะรับค่าของแท็ก HTML ใน Java ได้อย่างไร เมื่อฉันเจอสิ่งนี้ ฉันแน่ใจว่าโซลูชันนี้จะเป็นไลบรารีโอเพ่นซอร์สที่ใช้ฟังก์ชันที่ฉันต้องการ แต่ฉันไม่รู้ว่ามันจะยอดเยี่ยมและเต็มไปด้วยฟีเจอร์มากมายเช่น Jsoup ไม่เพียงให้การสนับสนุนการอ่านและแยกวิเคราะห์ไฟล์ HTML, คุณลักษณะ, คลาส CSS ในรูปแบบ JQuery เท่านั้น แต่ในขณะเดียวกันก็ให้คุณแก้ไขไฟล์เหล่านั้นได้ การใช้ Jsoup คุณสามารถทำอะไรก็ได้ที่คุณต้องการด้วยเอกสาร HTML ในบทความนี้ เราจะแยกวิเคราะห์ไฟล์ HTML และค้นหาชื่อและคุณสมบัติของแท็ก นอกจากนี้ เราจะดูตัวอย่างการดาวน์โหลดและแยกวิเคราะห์ HTML จากไฟล์และ URL ใดๆ เช่น หน้าแรกของ Google

เจซุปคืออะไร

Jsoup เป็นไลบรารี Java โอเพ่นซอร์สสำหรับการทำงานกับ HTML จริง มันมี API ที่สะดวกมากสำหรับการดึงและจัดการข้อมูลโดยใช้เทคนิค DOM, CSS และ jQuery ที่ดีที่สุด Jsoup ใช้ข้อกำหนด WHATWG HTML5 และแยกวิเคราะห์ HTML เป็น DOM เดียวกันกับเบราว์เซอร์สมัยใหม่เช่น Chrome และ Firefox นี่คือคุณสมบัติที่มีประโยชน์บางประการของไลบรารี Jsoup:
  • Jsoup สามารถขูดและแยก HTML จาก URL ไฟล์หรือสตริงได้
  • Jsoup สามารถค้นหาและแยกข้อมูลโดยใช้ DOM traversal หรือตัวเลือก CSS
  • Jsoup ช่วยให้คุณสามารถจัดการองค์ประกอบ HTML คุณลักษณะและข้อความได้
  • Jsoup จัดทำ white-list ของข้อมูลที่ผู้ใช้ให้มาเพื่อป้องกันการโจมตี XSS
  • Jsoup ยังสร้าง HTML ที่ "เรียบร้อย"
Jsoup ได้รับการออกแบบมาเพื่อทำงานกับ HTML ประเภทต่างๆ ที่มีอยู่ในโลกแห่งความเป็นจริง รวมถึง HTML ที่ได้รับการตรวจสอบอย่างเหมาะสมด้วยชุดแท็กที่ไม่สมบูรณ์และไม่ได้รับการตรวจสอบ ข้อดีหลักประการหนึ่งของ Jsoup คือความน่าเชื่อถือ

แยก HTML ใน Java โดยใช้ Jsoup

ในบทช่วยสอนนี้ เราจะเห็นสามตัวอย่างที่แตกต่างกันของการแยกวิเคราะห์และการสำรวจเอกสาร HTML ใน Java โดยใช้ Jsoup ในตัวอย่างแรก เราจะแยกวิเคราะห์สตริง HTML ที่มีแท็กในรูปแบบของสตริงตัวอักษร Java ในตัวอย่างที่สอง เราจะดาวน์โหลดเอกสาร HTML ของเราจากอินเทอร์เน็ต และในตัวอย่างที่สาม เราจะดาวน์โหลดไฟล์ HTML ตัวอย่างของเราเอง login.html เพื่อการแยกวิเคราะห์ ไฟล์นี้เป็นเอกสาร HTML ตัวอย่างที่ประกอบด้วยแท็ก "title" และแท็ก "div" ในส่วน "body" ที่มีรูปแบบ 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()สำหรับการอ่าน HTML จากสตริง, ไฟล์, จาก URI พื้นฐาน, จาก URL และจากInputStream. คุณยังสามารถระบุการเข้ารหัสเพื่อให้อ่านไฟล์ HTML ได้อย่างถูกต้องหากไฟล์ไม่อยู่ในรูปแบบ UTF-8 วิธีการparse(String html)แยกวิเคราะห์ HTML ที่เข้ามาเป็นวัตถุDocumentใหม่ ใน Jsoup คลาสDocumentจะสืบทอดมาจากคลาส ซึ่ง ขยายElementคลาส NodeคลาสยังNodeสืบทอดมา จาก TextNodeคลาส ตราบใดที่คุณส่งสตริงที่ไม่เป็นค่าว่างไปยังเมธอด คุณจะรับประกันว่าจะมีการแยกวิเคราะห์อ็อบเจ็กต์Documentที่มีองค์ประกอบ (อย่างน้อย) ที่มีองค์ประกอบ "head" และ "body" ได้สำเร็จและมีความหมาย หากคุณมีอ็อบเจ็กต์ คุณสามารถรับข้อมูลที่ต้องการได้โดยการเรียกวิธีการ ที่ DocumentเหมาะสมของคลาสDocumentและพาเรนต์ของคลาสElementและNode

โปรแกรม Java สำหรับแยกวิเคราะห์เอกสาร HTML

นี่คือโปรแกรมที่สมบูรณ์ของเราสำหรับการแยกวิเคราะห์สตริง HTML ไฟล์ HTML ที่ดาวน์โหลดจากอินเทอร์เน็ต และไฟล์ HTML ในเครื่อง หากต้องการรัน คุณสามารถใช้ IDE (Eclipse หรืออื่นๆ) หรือบรรทัดคำสั่งได้ ใน Eclipse สิ่งนี้ง่ายมาก เพียงคัดลอกโค้ดนี้ สร้างโปรเจ็กต์ Java ใหม่ คลิกขวาที่โฟลเดอร์ "src" และวางโค้ดที่คัดลอก Eclipse จะดูแลการสร้างแพ็คเกจและไฟล์ซอร์สโค้ดที่เหมาะสมด้วยชื่อที่เหมาะสม ดังนั้นจึงทำงานน้อยลงมาก หากคุณมีโปรเจ็กต์ Java อยู่แล้ว นี่เป็นเพียงขั้นตอนเดียว โปรแกรมด้านล่างแสดงสามตัวอย่างการแยกวิเคราะห์และการสำรวจไฟล์ HTML ในตัวอย่างแรก เราจะแยกวิเคราะห์สตริงที่มี HTML โดยตรง ในตัวอย่างที่สองคือไฟล์ HTML ที่ดาวน์โหลดจาก URL ในตัวอย่างที่สาม เราจะดาวน์โหลดและแยกวิเคราะห์เอกสาร 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 parser จะพยายามทุกวิถีทางเพื่อสร้างการแยกวิเคราะห์ HTML ที่ "สะอาด" ที่คุณระบุ ไม่ว่าจะมีรูปแบบที่ถูกต้องหรือไม่ก็ตาม สามารถจัดการกับข้อผิดพลาดต่อไปนี้:
  • แท็กที่ไม่ได้ปิด ตัวอย่างเช่น,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • แท็กโดยนัย ตัวอย่างเช่น ของที่เปิดอยู่<td>Java is Great</td>จะถูกห่อไว้<table><tr><td>
  • Jsoup สร้างโครงสร้างเอกสารที่แข็งแกร่ง (HTML ประกอบด้วยส่วนหัวและส่วนเนื้อหา แต่เนื้อหาประกอบด้วยองค์ประกอบที่เกี่ยวข้องเท่านั้น)
Jsoup เป็นไลบรารีโอเพ่นซอร์สที่ยอดเยี่ยมและเชื่อถือได้ ซึ่งทำให้การอ่านเอกสาร HTML, Body Fragment, สตริง HTML และการแยกวิเคราะห์เนื้อหาเว็บ HTML โดยตรงนั้นง่ายมาก
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION