JavaRush /مدونة جافا /Random-AR /تحليل HTML مع مكتبة Jsoup
Сергей
مستوى
Москва

تحليل HTML مع مكتبة Jsoup

نشرت في المجموعة
لذلك نريد الحصول على معلومات محددة من الموقع. دعونا نلقي نظرة على كيفية القيام بذلك خطوة بخطوة. تحليل HTML مع مكتبة jsoup - 1أولا نحن بحاجة للحصول على Document. هذا تمثيل لصفحة HTML الخاصة بنا. لدى Jsoup عدة طرق لتحويل الموقع إلى ملف Document. اتصل بالخادم
Document document = Jsoup.connect("https://hh.ru/").get();
Jsoup نفسه يتصل بالموقع. هذه الطريقة هي الأبسط، ولكنها مناسبة للاختبار فقط. هناك عملاء http أكثر ملاءمة ومرونة. ضع في اعتبارك أيضًا أنه بغض النظر عن عميل http الذي تستخدمه، قم بإضافة رأس للطلب User-Agentبقيمة مثل Chrome/81.0.4044.138. باستخدام هذا الرأس، يحدد الخادم الجهاز الذي قمت بالاتصال منه. بدون هذا العنوان، يعتبرك الخادم روبوتًا وقد يحظرك. من - الملف ؛
File file = new File("hh-test.html");
Document document = Jsoup.parse(file, "UTF-8", "hh.ru");
هذه هي الطريقة الرئيسية للحصول على كائن Document. الوسيطة الأخيرة "hh.ru"هي URI الأساسي. يعد ذلك ضروريًا لإنشاء روابط مطلقة من الروابط النسبية الموجودة على الموقع. من الخط
String html =
                "<html>                                                                       " +
                "    <head>                                                                   " +
                "        <title href=\"hh.ru/vacancy?home\">                                  " +
                "            Работа в Москве, поиск персонала и публикация вакансий - hh.ru   " +
                "        </title>                                                             " +
                "    </head>                                                                  " +
                "    <body>                                                                   " +
                "        <div class=\"header main\">                                          " +
                "            <h1>Работа найдется для каждого</h1>                             " +
                "            <div>Поиск вакансий</div>                                        " +
                "        </div>                                                               " +
                "        <div class=\"content\">                                              " +
                "            <div>Вакансии дня</div>                                          " +
                "            <div id=\"123\">Компании дня</div>                               " +
                "            <div>Работа из дома</div>                                        " +
                "        </div>                                                               " +
                "    </body>                                                                  " +
                "</html>                                                                      ";

        Document document = Jsoup.parse(html, "hh.ru");
بعد ذلك، سأقوم بتوضيح المكتبة في هذا HTML، والتي تمثل موقعًا مبسطًا. الحصول على علامة المهمة الرئيسية عند التحليل هي الحصول على العلامة المطلوبة. سنفعل هذا باستخدام الطريقة select. لاحظ أنه يقوم دائمًا بإرجاع قائمة العلامات. إذا لم يتم العثور على علامات، ستكون القائمة فارغة. تحتاج إلى تمرير محدد CSS الذي يتم من خلاله البحث عن العلامات كوسيطة الطريقة. سأتوقف عند المحددات بمزيد من التفصيل، لأن كل العمل يتلخص في كتابة المحدد الصحيح. عادةً ما نحتاج إلى إنشائه بحيث يُرجع علامة واحدة.
Elements h1 = document.select("h1");
System.out.println(h1);
الحصول على علامات العلامات h1 الإخراج:

<h1>Работа найдется для каждого</h1>
Elements titleElem = document.select("head > title");
الحصول على العلامات title. >تختار العلامة العلامات titleالمتداخلة داخل العلامةhead
Elements divs = document.select("body > div");
الحصول على العلامات divالمتداخلةbody
Elements firstDiv = document.select("body > div:nth-child(1)");
احصل على العلامة الأولى divالمتداخلة في ملف body. يعد استرجاع العلامة بالرقم التسلسلي طريقة سيئة، لأن موضعها في الموقع قد يتغير. من الأفضل تحديد العلامة باستخدام المعلمات المطلقة. هذه المعلمات هي سمات classوid
Elements contentElem = document.select("body > div.content");
احصل على علامة تحتوي divعلى فئة "المحتوى" المتداخلةbody
Elements idElem = document.select("#123");
الحصول على العلامات ذات المعرف "123"
Elements divHeader = document.select("body > div.header.main :not(h1)");
احصل على علامات divتحتوي على الفئتين "header" و"main"، متداخلتين في body, لكن بدون علامات h1 .

<div>
 Поиск вакансий
</div>
طرق العناصر بمجرد استلامنا للقائمة، Elementsيمكننا استخراج البيانات منها. اسمحوا لي أن أذكرك أنه عادة ما يبحث المحدد عن علامة واحدة، أي. يجب Elementsأن يكون الحجم 1.
elements.size();
عدد العلامات التي تم العثور عليها
elements.get(0);
احصل على العلامة الأولى من قائمة العلامات التي تم العثور عليها
elements.text();
النص المضمن في العلامة
elements.attr("href");
قيمة السمة "href".
elements.outerHtml();
تمثيل سلسلة للعلامة إذا كنت بحاجة إلى الحصول على محدد عنصر بسرعة، فافتح لوحة المطور (f12) في المتصفح، وانقر بزر الماوس الأيمن على العنصر، "عرض الكود"، ثم انقر بزر الماوس الأيمن على العلامة، ثم "نسخ" " نسخ المحدد". لن يكون هذا المحدد هو الأمثل، ولكنه مناسب تماما للحصول على نتائج سريعة. الاستنتاج : هذه هي أساسيات العمل مع مكتبة Jsoup. ولكن هذا يكفي لتحليل المواقع. للعمل بثقة، كل ما تحتاجه هو التدرب على كتابة المحددات على مواقع حقيقية. ملاحظة: تُستخدم هذه المكتبة لحل مشكلة كبيرة في المستوى 38 تحليل HTML مع مكتبة jsoup - 1تحليل HTML مع مكتبة jsoup - 3
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION