JavaRush /בלוג Java /Random-HE /3 דוגמאות כיצד לנתח קובץ HTML ב-Java באמצעות Jsoup
Sdu
רָמָה

3 דוגמאות כיצד לנתח קובץ HTML ב-Java באמצעות Jsoup

פורסם בקבוצה
3 דוגמאות כיצד לנתח קובץ HTML ב-Java באמצעות Jsoup - 1HTML הוא הליבה של ה-WEB, כל דפי האינטרנט שאתה רואה, בין אם הם נוצרים באופן דינמי באמצעות JavaScript, JSP, PHP, ASP או טכנולוגיות אינטרנט אחרות, מבוססים על HTML. למעשה, הדפדפן שלך מנתח את ה-HTML ומציג אותו בצורה שנוחה לך. אבל מה אם אתה צריך לנתח מסמך HTML ולמצוא בו אלמנט, תג, תכונה, או לבדוק אם קיים אלמנט מסוים או לא באמצעות תוכנת Java. אם היית מתכנת ג'אווה מספר שנים, אני בטוח שהיית עושה ניתוח XML באמצעות מנתחים כמו DOM או SAX. אבל, למרבה האירוניה, יש מקרים שבהם אתה צריך לנתח מסמך HTML מאפליקציית Java בסיסית שאינה מכילה Servlets וטכנולוגיות אינטרנט אחרות של Java. יתרה מכך, Core JDK גם אינו מכיל ספריות HTTP או HTML. זו הסיבה שכאשר מדובר בניתוח קובץ HTML, מתכנתי Java רבים שואלים את גוגל כיצד לקבל את הערך של תג HTML ב-Java. כשנתקלתי בזה, הייתי בטוח שהפתרון יהיה ספריית קוד פתוח שתטמיע את הפונקציונליות שאני צריך, אבל לא ידעתי שהיא תהיה נפלאה ועשירה בתכונות כמו Jsoup. זה לא רק מספק תמיכה בקריאה וניתוח של קובצי HTML, תכונות, מחלקות CSS בסגנון JQuery, אלא בו-זמנית, מאפשר לך לשנות אותם. באמצעות Jsoup אתה יכול לעשות כל מה שאתה רוצה עם מסמך HTML. במאמר זה ננתח קובץ HTML ונמצא את השמות והתכונות של התגים. כמו כן, נבחן דוגמאות להורדה וניתוח של HTML מקובץ ומכל כתובת אתר, כגון דף הבית של Google.

מה זה Jsoup

Jsoup היא ספריית Java בקוד פתוח לעבודה עם HTML אמיתי. הוא מספק API נוח מאוד לאחזור ולתפעל נתונים באמצעות הטכניקות הטובות ביותר של DOM, CSS ו-jQuery. Jsoup מיישם את מפרט WHATWG HTML5, ומנתח HTML לאותו DOM כפי שעושים דפדפנים מודרניים כמו Chrome ו-Firefox. להלן כמה מהתכונות השימושיות של ספריית Jsoup:
  • Jsoup יכול לגרד ולנתח HTML מכתובת URL, קובץ או מחרוזת.
  • Jsoup יכול למצוא ולחלץ נתונים באמצעות חציית DOM או בוררי CSS.
  • Jsoup מאפשר לך לתפעל רכיבי HTML, תכונות וטקסט.
  • Jsoup מספקת ניקוי רשימה לבנה של מידע שסופק על ידי המשתמש כדי למנוע התקפות 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המכיל (לפחות) את האלמנטים "ראש" ו"גוף". אם יש לך אובייקט 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
מנתח ה-HTML של Jsoup יעשה כל מאמץ לייצר ניתוח "נקי" של ה-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