JavaRush /مدونة جافا /Random-AR /تحليل HTML سهل مع jsoup
Stanislav
مستوى
Москва

تحليل HTML سهل مع jsoup

نشرت في المجموعة
ربما ستحتاج يومًا ما إلى الحصول على معلومات من موقع ويب أو مستند HTML في تطبيقك، وسأقول دون مزيد من اللغط أن استخدام مكتبة jsoup سيبسط مهمتك إلى حد كبير. وفقًا للويكي ، فإن jsoup هي مكتبة Java مفتوحة المصدر مصممة لتحليل واستخراج ومعالجة البيانات المخزنة في مستندات HTML.

بداية سريعة

يمكن تنزيل المكتبة كملف jar ووضعها في مشروع، أو الاتصال بها باستخدام Maven/Gradle. سأترك رابطًا للموقع الرسمي في نهاية المقالة: حيث يمكنك العثور على الإصدار الحالي من المكتبة. في المثال سوف نستخدم الاتصال عبر Maven. دعونا نضيف التبعية:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

الاستخدام

أولاً، تحتاج إلى الحصول على مثيل للفئة Documentمن org.jsoup.nodes.Document يشير إلى مصدر التحليل. يمكن أن يكون إما ملفًا محليًا أو رابطًا. على سبيل المثال، في هذه المقالة سوف نستخدم موقع yandex.ru ونحاول الحصول على موجز الأخبار الحالي الخاص بهم:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agentهو المعرف الذي يتم إرساله إلى الموقع الذي تتم زيارته. يعد هذا في العديد من المواقع المعيار الأكثر أهمية لمرشح مكافحة البريد العشوائي. Referrerيحتوي على عنوان URL لمصدر الطلب. تطرح الطريقة get()IOException الذي يمكن التعامل معه، حتى نتمكن من لف كل شيء في try/catchكتلة، أو مجرد رميها أبعد باستخدام throws. لقد تلقينا الآن الكود المصدري لهذه الصفحة. إذا لزم الأمر، يمكن لمكتبة jsoup نفسها استعادة العناصر التالفة. الآن كل ما علينا فعله هو تضييق نطاق البحث إلى كتلة منفصلة. تحتوي الطريقة select()على مجموعة كبيرة من الاستخدامات: فهي تسمح لك بالبحث عن العناصر حسب العلامة والسمات والفئة والمعلمات الأخرى. تدعم جميع المتصفحات الحديثة تقريبًا القدرة على البحث بسرعة عن الكود المصدري للعنصر المحدد. من خلال عمليات معالجة بسيطة، نجد الكود المصدري للعنصر الذي نحتاجه ونحصل على divكتلة مع الفئة المحددة، والتي سنستخدمها لأخذ العينات. تحليل HTML سهل باستخدام jsoup - 1دعونا نستخدم الفئة Elementsمن org.jsoup.select.Elements لتحديد كافة العناصر من الكتلة المحددة لدينا.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
الآن لدينا شيء مثل هذا: تحليل HTML سهل باستخدام jsoup - 2الآن كل ما علينا فعله هو استخدام حلقة صغيرة للتكرار عبر جميع العناصر:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
تسمح لك هذه الطريقة text()بتجاهل رمز الترميز وتترك فقط مجموعة من النص لجميع العناصر الواردة. ستكون نتيجة التنفيذ كما يلي: تحليل HTML سهل باستخدام jsoup - 3من السهل ملاحظة أن العدد الفعلي للصفوف المستلمة لا يتوافق مع العرض الفعلي على الصفحة. وهنا تكمن المزالق. إذا نظرت إلى الكود المصدري للترميز، ستلاحظ أن آخر الأخبار تتغير بشكل متحرك خلال فترة زمنية معينة. يتم حل بعض هذه "الحجارة" عن طريق أخذ عينات إضافية، وبالطبع الاختبارات. قد يتبين أن العناصر الخمسة الأولى ستحتوي على المعلومات التي نحتاجها، والعنصر السادس سيحتوي فقط على سطر فارغ مكتوب. ويحدث أيضًا أن الكتل لن تحتوي على أي معرفات، ومن ثم يمكن الإشارة مباشرةً باستخدام إحدى الطرق get(int index)إلى رقم موضع العنصر المعني.
System.out.println(listNews.select("a").get(2).text());

خاتمة

يوضح هذا المثال جزءًا صغيرًا فقط مما يستطيع jsoup القيام به. هناك أيضًا حقيقة أن المواقع غالبًا ما يتم تحديثها عن طريق تغيير بنية رمز الترميز، لذلك عند العمل مع الكشط، يجب أن تكون جاهزًا للتكيف مع التغييرات. يمكنك الحصول على مزيد من المعلومات والإصدار الحالي على الموقع الرسمي jsoup.org ، ويمكنك قراءة المزيد عن الفئات والأساليب على الرابط o7planning.org . سأترك رابطًا إلى github الخاص بي ، في وقت كتابة هذا التقرير، هناك العديد من روبوتات Telegram التي تستخدم Jsoup لتلقي المعلومات وعرضها.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION