تحليل HTML في Java: نظرة على المكتبات وأمثلة عملية
تحليل HTML (استخراج البيانات من صفحات الويب) هو إحدى المهام الأساسية في التطوير الحديث. توفر Java أدوات قوية لهذا الغرض. في هذه المقالة، سنستعرض ثلاث مكتبات شائعة: Jsoup وHtmlUnit وApache Tika. ستتعلم كيفية تثبيتها، وما المهام التي تحلها، وسترى أمثلة عملية للكود.
لماذا نحتاج إلى تحليل HTML؟
يُستخدم تحليل HTML من أجل:
- جمع البيانات من مواقع الويب (الأسعار، الأخبار، جهات الاتصال).
- اختبار تطبيقات الويب (استخراج عناصر الواجهة).
- أتمتة العمليات الروتينية (ملء النماذج، التحقق من الروابط).
- تحليل هيكل SEO للمواقع.
1. Jsoup — أشهر محلل HTML لـ Java
Jsoup هي مكتبة خفيفة وبديهية للعمل مع HTML. يمكنها تحميل الصفحات، وتحليلها، واستخراج البيانات باستخدام محددات CSS وطرق مشابهة لـ jQuery. تقوم Jsoup تلقائيًا بتصحيح الترميز غير الصحيح، مما يجعلها مثالية لتحليل المواقع الحقيقية.
التثبيت (Maven)
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.17.2</version></dependency>مثال: استخراج عناوين جميع الأخبار
لنفترض أننا بحاجة للحصول على جميع عناوين المقالات من بوابة إخبارية. نستخدم المحدد h2.news-title.
import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.select.Elements;
public class JsoupExample { public static void main(String[] args) throws Exception { // تحميل صفحة HTML Document doc = Jsoup.connect("https://example.com/news") .userAgent("Mozilla/5.0") .timeout(5000) .get();
// استخراج جميع عناصر h2 ذات الفئة "news-title" Elements titles = doc.select("h2.news-title");
// طباعة نص كل عنوان for (var title : titles) { System.out.println(title.text()); } }}ميزات Jsoup:
- تعمل بدون متصفح، فقط طلبات HTTP.
- دعم محددات CSS (كما في jQuery).
- إمكانية التعامل مع DOM (إضافة، حذف العناصر).
- لا تستطيع تنفيذ JavaScript.
2. HtmlUnit — تحليل مع دعم JavaScript
HtmlUnit هو محاكي متصفح بلغة Java. لا يقوم فقط بتحليل HTML، بل يعالج الصفحة بالكامل: ينفذ JavaScript، ويحمل CSS، ويعالج طلبات AJAX. مثالي لمواقع SPA الحديثة (React، Angular).
التثبيت (Maven)
<dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.70.0</version></dependency>مثال: الحصول على البيانات بعد تحميل JavaScript
لنفترض أن هناك كتلة ديناميكية على الصفحة تظهر بعد ثانيتين من التحميل. سينتظرها HtmlUnit.
import com.gargoylesoftware.htmlunit.WebClient;import com.gargoylesoftware.htmlunit.html.HtmlPage;import com.gargoylesoftware.htmlunit.html.HtmlElement;
public class HtmlUnitExample { public static void main(String[] args) throws Exception { try (WebClient webClient = new WebClient()) { // تعطيل CSS والتسجيل للسرعة webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(true);
// تحميل الصفحة HtmlPage page = webClient.getPage("https://example.com/dynamic");