Балким, качандыр бир күнү сизге колдонмоңуздагы веб-сайттан же HTML documentинен маалымат алышыңыз керек болот жана мен jsoup китепканасын колдонуу тапшырмаңызды бир топ жөнөкөйлөтөт деп айтайын. Викиге ылайык , jsoup HTML documentтеринде сакталган маалыматтарды талдоо, алуу жана башкаруу үчүн иштелип чыккан ачык булак Java китепканасы.
Тез баштоо
Китепкананы jar файлы катары жүктөп алып, долбоорго жайгаштырса болот же Maven/Gradle аркылуу туташса болот. Мен макаланын аягында расмий веб-сайтка шилтеме калтырам: ал жерден китепкананын учурдагы versionсын таба аласыз. Мисалда биз Maven аркылуу байланышты колдонобуз. көз карандылыкты кошолу:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
Колдонуу
Биринчиден,Document
org.jsoup.nodes.Document сайтынан класстын үлгүсүн алуу керек, анда талдоо булагын көрсөтүүчү. Бул жергorктүү файл же шилтеме болушу мүмкүн. Мисалы, бул макалада биз 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
. Биз азыр бул барактын баштапкы codeун алдык. Зарыл болсо, jsoup китепканасынын өзү бузулган элементтерди калыбына келтире алат. Эми биз издөөнү өзүнчө блокко чейин кыскартышыбыз керек. Метод select()
колдонуунун чоң тандоосуна ээ: ал элементтерди тег, атрибуттар, класс жана башка параметрлер боюнча издөөгө мүмкүндүк берет. Дээрлик бардык заманбап браузерлер тандалган элементтин баштапкы codeун тез издөө мүмкүнчүлүгүн колдойт. Жөнөкөй манипуляциялар менен биз керектүү элементтин баштапкы codeун табабыз жана div
белгиленген класстагы блокту алабыз, аны биз үлгү алуу үчүн колдонобуз. Тандалган блоктон бардык элементтерди тандоо үчүн org.jsoup.select.Elements классын колдонолу .Elements
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Эми бизде мындай нерсе бар: Эми бардык элементтерди кайталоо үчүн кичинекей циклди колдонушубуз керек:
for (Element element : listNews.select("a"))
System.out.println(element.text());
Метод text()
белгилөө codeун жокко чыгарууга мүмкүндүк берет жана бардык кирген элементтер үчүн тексттин айкалышын гана калтырат. Аткаруу натыйжасы төмөнкүдөй болот: Кабыл алынган катарлардын иш жүзүндөгү саны беттеги иш жүзүндөгү дисплейге дал келбей турганын байкоо оңой. Бул жерде тузактар жатат. Эгер сиз белгилөөнүн баштапкы codeун карасаңыз, акыркы жаңылыктар белгилүү бир убакыт аралыгында жандуу түрдө өзгөрөрүн байкайсыз. Бул "таштардын" кээ бир кошумча үлгүлөрдү алуу менен чечилет, жана, албетте, тесттер. Көрсө, биринчи беш элементте бизге керектүү маалымат камтылат, ал эми алтынчы элементте скрипттелген бош сап гана болот. get(int index)
Ошондой эле, блоктордун эч кандай идентификаторлору жок болуп калат, анда каралып жаткан элементтин позициясынын номерин метод аркылуу түздөн-түз көрсөтүүгө болот .
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION