JavaRush /مدونة جافا /Random-AR /3 أمثلة لكيفية تحليل ملف HTML في Java باستخدام Jsoup
Sdu
مستوى

3 أمثلة لكيفية تحليل ملف HTML في Java باستخدام Jsoup

نشرت في المجموعة
3 أمثلة لكيفية تحليل ملف HTML في Java باستخدام Jsoup - 1HTML هو جوهر الويب، وجميع صفحات الإنترنت التي تراها، سواء تم إنشاؤها ديناميكيًا باستخدام JavaScript أو JSP أو PHP أو ASP أو تقنيات الويب الأخرى، تعتمد على HTML. في الواقع، يقوم متصفحك بتحليل HTML ويعرضه بطريقة مناسبة لك. ولكن ماذا لو كنت بحاجة إلى تحليل مستند HTML والعثور على بعض العناصر أو العلامات أو السمات فيه أو التحقق من وجود عنصر معين أم لا باستخدام برنامج Java. إذا كنت مبرمج Java لعدة سنوات، فأنا متأكد من أنك كنت ستجري تحليل XML باستخدام المحلل اللغوي مثل 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 الحقيقي. فهو يوفر واجهة برمجة تطبيقات مريحة للغاية لاسترداد البيانات ومعالجتها باستخدام أفضل التقنيات المشابهة لـ 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 يتكون من علامة "عنوان" وعلامة "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()لقراءة HTML من سلسلة، وملف، ومن عنوان URI أساسي، ومن عنوان URL، ومن ملف InputStream. يمكنك أيضًا تحديد الترميز لقراءة ملف HTML بشكل صحيح إذا لم يكن بتنسيق UTF-8. تقوم الطريقة parse(String html)بتوزيع HTML الوارد إلى كائن جديد Document. في Jsoup، يرث الفصل Documentمن الفصل Element، مما يؤدي إلى توسيع الفصل Node. Nodeيرث الفصل أيضًا من الفصل TextNode. طالما قمت بتمرير سلسلة غير فارغة إلى الطريقة، نضمن لك الحصول على تحليل ناجح وهادف لكائن Documentيحتوي (على الأقل) على عنصري "الرأس" و"النص". إذا كان لديك كائن Document، فيمكنك الحصول على البيانات المطلوبة عن طريق استدعاء الأساليب المناسبة للفئة Documentوأولياء أمورها Elementو Node.

برنامج جافا لتحليل وثيقة 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 كل جهد ممكن لإنتاج تحليل "نظيف" لـ 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