JavaRush /Java блогу /Random-KY /jsoup менен жеңил HTML талдоо
Stanislav
Деңгээл
Москва

jsoup менен жеңил HTML талдоо

Группада жарыяланган
Балким, качандыр бир күнү сизге колдонмоңуздагы веб-сайттан же 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>

Колдонуу

Биринчиден, Documentorg.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 jsoup аркылуу оңой HTML талдоо - 1классын колдонолу .Elements
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Эми бизде мындай нерсе бар: jsoup аркылуу оңой HTML талдоо - 2Эми бардык элементтерди кайталоо үчүн кичинекей циклди колдонушубуз керек:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
Метод text()белгилөө codeун жокко чыгарууга мүмкүндүк берет жана бардык кирген элементтер үчүн тексттин айкалышын гана калтырат. Аткаруу натыйжасы төмөнкүдөй болот: jsoup аркылуу оңой HTML талдоо - 3Кабыл алынган катарлардын иш жүзүндөгү саны беттеги иш жүзүндөгү дисплейге дал келбей турганын байкоо оңой. Бул жерде тузактар ​​жатат. Эгер сиз белгилөөнүн баштапкы codeун карасаңыз, акыркы жаңылыктар белгилүү бир убакыт аралыгында жандуу түрдө өзгөрөрүн байкайсыз. Бул "таштардын" кээ бир кошумча үлгүлөрдү алуу менен чечилет, жана, албетте, тесттер. Көрсө, биринчи беш элементте бизге керектүү маалымат камтылат, ал эми алтынчы элементте скрипттелген бош сап гана болот. get(int index)Ошондой эле, блоктордун эч кандай идентификаторлору жок болуп калат, анда каралып жаткан элементтин позициясынын номерин метод аркылуу түздөн-түз көрсөтүүгө болот .
System.out.println(listNews.select("a").get(2).text());

Корутунду

Бул мисал jsoup жөндөмдүүлүгүнүн бир аз гана бөлүгүн көрсөтөт. Ошондой эле сайттар тез-тез жаңыланып, белгилөө codeунун түзүмүн өзгөртүү фактысы бар, андыктан кыргыч менен иштөөдө сиз өзгөрүүлөргө көнүүгө даяр болушуңуз керек. Көбүрөөк маалыматты жана учурдагы versionны jsoup.org расмий сайтынан ала аласыз ; класстар жана методдор тууралуу көбүрөөк окуй аласыз o7planning.org . Мен өзүмдүн github шилтемесин калтырам , жазуу учурунда Jsoupту маалымат алуу жана көрсөтүү үчүн колдонгон бир нече Telegram боттору бар.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION