لذلك نريد الحصول على معلومات محددة من الموقع. دعونا نلقي نظرة على كيفية القيام بذلك خطوة بخطوة. أولا نحن بحاجة للحصول على
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
GO TO FULL VERSION