JavaRush /Блоги Java /Random-TG /Таҳлили осони HTML бо jsoup
Stanislav
Сатҳи
Москва

Таҳлили осони HTML бо jsoup

Дар гурӯҳ нашр шудааст
Шояд рӯзе ба шумо лозим ояд, ки аз вебсайт ё ҳуҷҷати HTML дар замимаи худ маълумот гиред ва ман бе гапи бештар мегӯям, ки истифодаи китобхонаи jsoup вазифаи шуморо хеле осон мекунад. Мувофиқи wiki , jsoup китобхонаи кушодаи Java мебошад, ки барои таҳлил, истихроҷ ва коркарди маълумоти дар ҳуҷҷатҳои HTML нигоҳ дошташуда пешбинӣ шудааст.

Оғози зуд

Китобхонаро метавон ҳамчун файли jar зеркашӣ кард ва дар лоиҳа ҷойгир кард ё бо истифода аз Maven/Gradle пайваст. Ман дар охири мақола пайвандеро ба вебсайти расмӣ мегузорам: дар он ҷо шумо versionи ҷории китобхонаро пайдо карда метавонед. Дар мисол мо пайвастшавиро тавассути 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идентификаторест, ки ба сайти боздидшуда хабар дода мешавад. Дар бисёр сайтҳо ин муҳимтарин меъёри филтри антиспам мебошад. ReferrerURL-и манбаи дархостро дар бар мегирад. Ин усул get()IOException-и идорашавандаро мепартояд, аз ин рӯ мо метавонем ҳама чизро дар try/catchблок печонем ё танҳо онро бо throws. Мо ҳоло рамзи сарчашмаи ин саҳифаро гирифтем. Агар лозим бошад, худи китобхонаи jsoup метавонад унсурҳои вайроншударо барқарор кунад. Ҳоло танҳо мо бояд кор кунем, ки ҷустуҷӯро ба як блоки алоҳида маҳдуд кунем. Усул select()дорои интихоби калони истифода мебошад: он ба шумо имкон медиҳад, ки элементҳоро аз рӯи тег, атрибутҳо, синф ва дигар параметрҳо ҷустуҷӯ кунед. Қариб ҳамаи браузерҳои муосир қобorяти зуд ҷустуҷӯ кардани рамзи сарчашмаи элементи интихобшударо дастгирӣ мекунанд. Бо манипуляцияҳои оддӣ, мо рамзи сарчашмаи элементи ба мо лозимиро пайдо мекунем ва divблокеро бо синфи муайяншуда мегирем, ки мо онро барои интихоб истифода хоҳем кард. Таҳлor осони HTML бо истифода аз jsoup - 1Биёед синфро Elementsаз org.jsoup.select.Elements истифода барем, то ҳамаи элементҳоро аз блоки интихобкардаамон интихоб кунем.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Ҳоло мо чизе ба ин монанд дорем: Таҳлor осони HTML бо истифода аз jsoup - 2Акнун мо бояд танҳо як ҳалқаи хурдро истифода барем, то тамоми унсурҳоро такрор кунем:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
Ин усул text()ба шумо имкон медиҳад, ки рамзи қайдкуниро партоед ва танҳо маҷмӯи матнро барои ҳама унсурҳои воридотӣ мегузорад. Натиҷаи иҷро чунин хоҳад буд: Таҳлor осони HTML бо истифода аз jsoup - 3Ба осонӣ пай бурдан мумкин аст, ки шумораи воқеии сатрҳои гирифташуда ба намоиши воқеии саҳифа мувофиқат намекунад. Ин аст, ки домҳо дар он ҷо ҳастанд. Агар шумо ба рамзи сарчашмаи қайд назар кунед, шумо хоҳед дид, ки хабарҳои охирин дар фосилаи муайяни вақт ба таври аниматсионӣ тағир меёбанд. Баъзе аз ин "сангҳо" тавассути гирифтани намунаҳои иловагӣ ва албатта, санҷишҳо ҳал карда мешаванд. Мумкин аст маълум шавад, ки панҷ унсури аввал маълумоти заруриро дар бар мегиранд ва дар элементи шашум танҳо як сатри холии скриптӣ иборат аст. Инчунин рӯй медиҳад, ки блокҳо ягон идентификатор надоранд, пас бо истифода аз усул бевосита get(int index)ба рақами мавқеи элементи мавриди назар ишора кардан мумкин аст.
System.out.println(listNews.select("a").get(2).text());

Хулоса

Ин мисол танҳо як қисми ками он чизеро нишон медиҳад, ки jsoup қодир аст. Инчунин он аст, ки сайтҳо зуд-зуд нав карда мешаванд, сохтори рамзи аломатҳоро тағир медиҳанд, аз ин рӯ ҳангоми кор бо скрепинг шумо бояд барои мутобиқ шудан ба тағирот омода бошед. Шумо метавонед маълумоти бештар ва versionи ҷорӣро дар вебсайти расмии jsoup.org дастрас кунед ; шумо метавонед дар бораи дарсҳо ва усулҳо дар истиноди o7planning.org маълумоти бештар гиред . Ман истинод ба github- и худ мегузорам , дар вақти навиштан якчанд ботҳои Telegram мавҷуданд, ки Jsoup-ро барои қабул ва намоиш додани маълумот истифода мебаранд.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION