HTML هو جوهر الويب. جميع الصفحات التي تراها على الإنترنت هي HTML، سواء تم إنشاؤها ديناميكيًا بواسطة JavaScript أو JSP أو PHP أو ASP أو تقنيات الويب الأخرى. سيقوم متصفحك بتحليل HTML وتقديمه لك. ولكن ماذا لو كنت بحاجة إلى تحليل مستند HTML بنفسك في برنامج Java والعثور على عناصر أو علامات أو سمات معينة أو التحقق من وجود عنصر معين؟ إذا كنت تبرمج بلغة Java لسنوات عديدة، فأعتقد أنك لا بد أنك حاولت تحليل XML واستخدمت المحللين اللغويين مثل DOM أو SAX، ولكن من المحتمل جدًا أنك لم تقم مطلقًا بأي عمل تحليلي لـ HTML. الأمر الأكثر إثارة للسخرية هو أنه في تطبيقات Java، هناك أوقات قليلة جدًا عندما تحتاج إلى تحليل مستندات HTML، وهذا لا يشمل Servlets أو تقنيات Java WEB الأخرى. والأسوأ من ذلك هو أن نواة JDK لا تتضمن مكتبات HTTP أو HTML، على الأقل لا أعرف عنها. ولهذا السبب، عندما يتعلق الأمر بتحليل ملفات HTML، يتعين على العديد من مبرمجي Java الذهاب إلى Google أولاً لمعرفة كيفية استخراج علامة HTML في Java. عندما كانت لدي هذه الحاجة، اعتقدت أنه سيكون هناك بعض المكتبات مفتوحة المصدر التي يمكنها تحقيق ذلك، لكنني لم أتوقع أنه ستكون هناك مكتبة رائعة وكاملة الوظائف مثل JSoup. فهو لا يدعم قراءة وتحليل مستندات HTML فحسب، بل يسمح لك أيضًا باستخراج أي عناصر من ملفات HTML، بالإضافة إلى سماتها وخصائص CSS، ويمكنك أيضًا تعديلها. مع JSoup يمكنك فعل أي شيء تقريبًا باستخدام مستندات HTML. سنرى مثالاً لكيفية تنزيل وتحليل ملف HTML من صفحة Google الرئيسية أو أي عنوان URL في Java.
ما هي مكتبة JSoup
Jsoup هي مكتبة Java مفتوحة المصدر يمكن استخدامها لمعالجة HTML في التطبيقات العملية. فهو يوفر واجهة برمجة تطبيقات (API) مريحة للغاية لاستخراج البيانات وتعديلها، مع الاستفادة الكاملة من مزايا أساليب DOM وCSS وأسلوب jquery. تطبق Jsoup مواصفات WAHTWG HTML5، وDOM الذي تقوم بتوزيعه من HTML هو نفسه تمامًا الذي تم تحليله بواسطة المتصفحات الحديثة مثل Chrome وFirefox. فيما يلي بعض الميزات المفيدة لمكتبة Jsoup:
1. يمكن لـ Jsoup الحصول على HTML وتحليله من عنوان URL أو ملف أو سلسلة.
2. يمكن لـ Jsoup العثور على البيانات واستخراجها باستخدام محددات DOM أو CSS.
3. يمكنك استخدام Jsoup لتعديل عناصر HTML والسمات والنص.
4.يضمن Jsoup أن المحتوى المقدم من قبل المستخدمين نظيف من خلال قائمة بيضاء آمنة لمنع هجمات XSS.
5. يمكن لـ Jsoup أيضًا إخراج HTML أنيق.
تم تصميم Jsoup للتعامل مع جميع أنواع HTML المختلفة التي تظهر في الحياة الواقعية، بما في ذلك HTML الصحيح والصالح بالإضافة إلى مجموعات العلامات غير الكاملة وغير الصالحة. إحدى القدرات التنافسية الأساسية لشركة Jsoup هي متانتها.
استخدام Jsoup لتحليل HTML في Java
في هذا البرنامج التعليمي لتحليل Java HTML، سنرى ثلاثة أمثلة مختلفة لاستخدام Jsoup لتحليل HTML واجتيازه في Java. في المثال الأول، سنقوم بتحليل سلسلة HTML، محتواها عبارة عن علامة مكونة من سلسلة حرفية في Java. في المثال الثاني، سنقوم بتنزيل مستند HTML من الويب، وفي المثال الثالث، سنقوم بتحميل نموذج ملف HTMLlogin.html للتحليل. هذا الملف هو مثال لمستند HTML، وهو يحتوي على علامة عنوان وعلامة div داخل النص الذي يحتوي على نموذج. يحتوي على علامات إدخال للحصول على أسماء المستخدمين وكلمات المرور، بالإضافة إلى أزرار الإرسال وإعادة التعيين للخطوة التالية. إنه HTML صحيح وصالح، أي أن جميع العلامات والسمات مغلقة بشكل صحيح. إليك نموذج ملف HTML الخاص بنا:
انسخ رمز الكود كما يلي:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<أتش تي أم أل>
<الرأس>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>صفحة تسجيل الدخول</title>
</الرأس>
<الجسم>
<div معرف = "تسجيل الدخول" >
<إجراء النموذج = "login.do">
اسم المستخدم : <input id="username" type="text" /><br>
كلمة المرور: <input id="password" type="password" /><br>
<إدخال معرف = "إرسال" نوع = "إرسال" />
<معرف الإدخال = "إعادة تعيين" نوع = "إعادة تعيين" />
</النموذج>
</div>
</الجسم>
</html>
يعد استخدام Jsoup لتحليل HTML أمرًا بسيطًا للغاية، كل ما عليك فعله هو استدعاء الأسلوب الثابت Jsoup.parse() وتمرير سلسلة HTML الخاصة بك. يوفر Jsoup العديد من أساليب التحليل () المحملة بشكل زائد، والتي يمكنها قراءة ملفات HTML من السلاسل والملفات وعناوين URI وعناوين URL وحتى InputStreams. إذا لم يكن ترميز UTF-8، فيمكنك أيضًا تحديد ترميز الأحرف بحيث يمكن قراءة ملف HTML بشكل صحيح. فيما يلي قائمة كاملة بطرق تحليل HTML في مكتبة Jsoup. تقوم طريقة التحليل (String html) بتوزيع إدخال HTML في مستند جديد. في Jsoup، يرث المستند من العنصر، والذي يرث بدوره من Node. نفس TextNode يرث أيضًا من Node. طالما قمت بتمرير سلسلة غير فارغة، فستحصل بالتأكيد على تحليل ناجح وهادف وستحصل على مستند يحتوي على عناصر الرأس والجسم. بمجرد حصولك على هذا المستند، يمكنك استدعاء الأساليب المناسبة في المستند والفئتين الأصليتين له Element وNode للحصول على البيانات التي تريدها.
برنامج Java الذي يقوم بتوزيع مستندات HTML
يوجد أدناه برنامج Java كامل يقوم بتحليل سلاسل HTML وملفات HTML التي تم تنزيلها من الإنترنت وملفات HTML الموجودة في نظام الملفات المحلي. يمكنك استخدام Eclipse IDE أو IDE آخر أو حتى الأوامر لتشغيل هذا البرنامج. في Eclipse، الأمر بسيط للغاية. ما عليك سوى نسخ هذا الرمز وإنشاء مشروع Java جديد والنقر بزر الماوس الأيمن على حزمة src ولصقها. سيقوم Eclipse بإنشاء الحزمة الصحيحة وملف Java المصدر بنفس الاسم، وبالتالي يكون عبء العمل في حده الأدنى. إذا كان لديك بالفعل نموذج مشروع Java، فلا يلزمك سوى خطوة واحدة. يعرض برنامج Java التالي ثلاثة أمثلة مختلفة لتحليل ملفات HTML واجتيازها. في المثال الأول، نقوم مباشرة بتحليل سلسلة تحتوي على محتوى HTML، وفي المثال الثاني نقوم بتحليل ملف HTML تم تنزيله من عنوان URL، وفي المثال الثالث نقوم بتحميل مستند HTML من نظام الملفات المحلي وتحليله. يتم استخدام طريقة التحليل في كلا المثالين الأول والثالث للحصول على كائن مستند، والذي يمكنك الاستعلام عنه لاستخراج أي قيمة علامة أو قيمة سمة. في المثال الثاني، نستخدم طريقة Jsoup.connect، والتي ستقوم بإنشاء اتصال URL، وتنزيل HTML وتحليله. ستعيد هذه الطريقة أيضًا مستندًا، والذي يمكن استخدامه للاستعلامات اللاحقة والحصول على قيمة علامة أو سمة.
انسخ رمز الكود كما يلي:
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
/**
[*] برنامج Java لتحليل/قراءة مستندات HTML من ملف باستخدام مكتبة Jsoup.
[*] Jsoup هي مكتبة مفتوحة المصدر تسمح لمطور Java بتحليل HTML
[*] الملفات واستخراج العناصر ومعالجة البيانات وتغيير النمط باستخدام DOM وCSS و
[*] طريقة JQuery مثل.
[*]
[*] @المؤلف جافين بول
[*]/
الفئة العامة HTMLParser {
public static void main(String args[]) {
// تحليل سلسلة HTML باستخدام مكتبة JSoup
سلسلة HTMLSTring = "<!DOCTYPE html>"
+ "<html>"
+ "<الرأس>"
+ "<title>مثال JSoup</title>"
+ "</الرأس>"
+ "<الجسم>"
+ "|[b]HelloWorld[/b]"
+ ""
+ "</الجسم>"
+ "</html>";
المستند html = Jsoup.parse(HTMLSTring);
عنوان السلسلة = html.title();
String h1 = html.body().getElementsByTag("h1").text();
System.out.println("أدخل سلسلة HTML إلى JSoup:" + HTMLSTring);
System.out.println("بعد التحليل، العنوان:" + title);
System.out.println("بعد التحليل، العنوان:" + h1);
// JSoup مثال 2 - قراءة صفحة HTML من URL
مستند الوثيقة؛
يحاول {
doc = Jsoup.connect("http://google.com/").get();
العنوان = doc.title();
} قبض (IOException ه) {
printStackTrace();
}
System.out.println("يستطيع Jsoup قراءة صفحة HTML من عنوان URL، العنوان:" + title);
// JSoup مثال 3 - تحليل ملف HTML في Java
//المستند htmlFile = Jsoup.parse("login.html"، "ISO-8859-1")؛ // خطأ
المستند htmlFile = null;
يحاول {
htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
} قبض (IOException ه) {
// TODO كتلة الالتقاط التي تم إنشاؤها تلقائيًا
printStackTrace();
} // يمين
العنوان = htmlFile.title();
العنصر div = htmlFile.getElementById("تسجيل الدخول");
String cssClass = div.className(); // الحصول على عنصر HTML لنموذج الفصل
System.out.println("يمكن لـ Jsoup أيضًا تحليل ملف HTML مباشرة");
System.out.println("العنوان :" + العنوان);
System.out.println("فئة علامة div:" + cssClass);
}
}
الإخراج:
انسخ رمز الكود كما يلي:
أدخل سلسلة HTML إلى JSoup :<!DOCTYPE html><html><head><title>مثال JSoup</title></head><body><table><tr><td><h1>HelloWorld</h1> </tr></table></body></html>
بعد التحليل، العنوان: مثال JSoup
بعد التحليل، العنوان: HelloWorld
يمكن لـ Jsoup قراءة صفحة HTML من عنوان URL، العنوان: Google
يمكن لـ Jsoup أيضًا تحليل عنوان ملف HTML مباشرة: صفحة تسجيل الدخول
فئة علامة div: بسيطة
ميزة Jsoup هي أنها قوية جدًا. سيقوم محلل Jsoup HTML بتحليل HTML الذي تقدمه بشكل نظيف قدر الإمكان، بغض النظر عما إذا كان HTML منسقًا بشكل جيد أم لا. يمكنه التعامل مع الأخطاء مثل العلامات غير المغلقة (على سبيل المثال، Java <p>Scala إلى <p>JavaScala)، والعلامات الضمنية (على سبيل المثال، |Java is Great ملفوفة في |)، ويمكنه دائمًا إنشاء إخراج بنية مستند (HTML) بما في ذلك الرأس والجسم، وسيتم تضمين العناصر الصحيحة فقط في الرأس). هذه هي الطريقة التي يتم بها تحليل HTML في Java. Jsoup هي مكتبة مفتوحة المصدر ممتازة وقوية تجعل من السهل جدًا قراءة مستندات HTML وأجزاء النص وسلاسل HTML وتحليل محتوى HTML مباشرةً من الويب. تعلمنا في هذه المقالة كيفية الحصول على علامة HTML محددة في Java، حيث قمنا في المثال الأول باستخراج قيمة العنوان وعلامات H1 إلى النص، وفي المثال الثالث تعلمنا كيفية الحصول عليها من خلال Extract CSS Properties إلى الحصول على قيم الخصائص من علامات HTML. بالإضافة إلى أسلوب html.body().getElementsByTag("h1").text() القوي بنمط jQuery، يمكنك أيضًا استخراج علامات HTML التعسفية، كما يوفر وظائف مثل Document.title() وElement.className( ) طريقة مريحة، يمكنك الحصول بسرعة على العنوان وفئة CSS. أتمنى أن تستمتع مع JSoup وسنرى المزيد من الأمثلة على واجهة برمجة التطبيقات هذه قريبًا.