Marahil balang araw kakailanganin mong kumuha ng impormasyon mula sa isang website o HTML na dokumento sa iyong aplikasyon, at sasabihin ko nang walang karagdagang ado na ang paggamit ng jsoup library ay lubos na magpapasimple sa iyong gawain. Ayon sa wiki , ang jsoup ay isang open source na Java library na idinisenyo para sa pag-parse, pag-extract at pagmamanipula ng data na nakaimbak sa mga HTML na dokumento.
Mabilis na pagsisimula
Maaaring ma-download ang library bilang isang jar file at ilagay sa isang proyekto, o konektado gamit ang Maven/Gradle. Mag-iiwan ako ng link sa opisyal na website sa dulo ng artikulo: doon mo mahahanap ang kasalukuyang bersyon ng library. Sa halimbawa ay gagamitin namin ang koneksyon sa pamamagitan ng Maven. Magdagdag tayo ng dependency:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
Paggamit
Una sa lahat, kailangan mong kumuha ng instance ng klaseDocument
mula sa org.jsoup.nodes.Document na nagsasaad ng source para sa pag-parse. Maaari itong maging isang lokal na file o isang link. Halimbawa, sa artikulong ito gagamitin namin ang website na yandex.ru at susubukan naming makuha ang kanilang kasalukuyang feed ng balita:
Document doc = Jsoup.connect("https://yandex.ru/")
.userAgent("Chrome/4.0.249.0 Safari/532.5")
.referrer("http://www.google.com")
.get();
User Agent
ay isang identifier na ipinapaalam sa site na binibisita. Sa maraming mga site ito ang pinakamahalagang pamantayan para sa filter na antispam. Referrer
naglalaman ng URL ng pinagmulan ng kahilingan. Ang pamamaraan get()
ay nagtatapon ng isang pinangangasiwaan na IOException, upang maaari naming ibalot ang lahat sa try/catch
isang bloke, o itapon lamang ito nang higit pa gamit ang throws
. Natanggap na namin ngayon ang source code para sa page na ito. Kung kinakailangan, ang jsoup library mismo ay maaaring mag-restore ng mga nasirang elemento. Ngayon ang kailangan lang nating gawin ay paliitin ang paghahanap sa isang hiwalay na bloke. Ang pamamaraan select()
ay may malaking seleksyon ng mga gamit: pinapayagan ka nitong maghanap ng mga elemento ayon sa tag, mga katangian, klase at iba pang mga parameter. Halos lahat ng modernong browser ay sumusuporta sa kakayahang mabilis na maghanap para sa source code ng isang napiling elemento. Sa mga simpleng manipulasyon, nakita namin ang source code ng elemento na kailangan namin at nakakakuha div
ng block na may tinukoy na klase, na gagamitin namin para sa sampling. Gamitin natin ang klase Elements
mula sa org.jsoup.select.Elements para piliin ang lahat ng elemento mula sa napili naming block.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Ngayon mayroon kaming isang bagay na tulad nito: Ngayon ang kailangan lang nating gawin ay gumamit ng isang maliit na loop upang umulit sa lahat ng mga elemento:
for (Element element : listNews.select("a"))
System.out.println(element.text());
Ang pamamaraan text()
ay nagpapahintulot sa iyo na itapon ang markup code at nag-iiwan lamang ng kumbinasyon ng teksto para sa lahat ng mga papasok na elemento. Ang resulta ng pagpapatupad ay ang mga sumusunod: Madaling mapansin na ang aktwal na bilang ng mga row na natanggap ay hindi tumutugma sa aktwal na display sa pahina. Dito nakasalalay ang mga patibong. Kung titingnan mo ang source code ng markup, mapapansin mo na ang pinakabagong mga balita ay nagbabago nang animated sa isang tiyak na agwat ng oras. Ang ilan sa mga "bato" na ito ay nalutas sa pamamagitan ng karagdagang sampling, at siyempre, mga pagsubok. Maaaring lumabas na ang unang limang elemento ay maglalaman ng impormasyong kailangan namin, at ang ikaanim na elemento ay maglalaman lamang ng isang script na walang laman na linya. Nangyayari rin na ang mga bloke ay walang anumang mga identifier, pagkatapos ay posible na direktang ituro gamit ang isang paraan get(int index)
sa numero ng posisyon ng elementong pinag-uusapan.
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION