شاید روزی شما نیاز به دریافت اطلاعات از یک وب سایت یا سند HTML در برنامه خود داشته باشید، و من بدون هیچ مقدمه ای می گویم که استفاده از کتابخانه jsoup کار شما را بسیار ساده می کند. طبق ویکی ، jsoup یک کتابخانه جاوا منبع باز است که برای تجزیه، استخراج و دستکاری داده های ذخیره شده در اسناد 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 را نشان می دهد. همچنین این واقعیت وجود دارد که سایت‌ها اغلب به‌روزرسانی می‌شوند و ساختار کد نشانه‌گذاری را تغییر می‌دهند، بنابراین هنگام کار با scraping، باید آماده سازگاری با تغییرات باشید. شما می توانید اطلاعات بیشتر و نسخه فعلی را در وب سایت رسمی jsoup.org دریافت کنید؛ می توانید اطلاعات بیشتر در مورد کلاس ها و روش ها را در o7planning.org بخوانید . من لینکی به github خود می گذارم ، در زمان نوشتن چندین ربات تلگرام وجود دارد که از Jsoup برای دریافت و نمایش اطلاعات استفاده می کنند.