JavaRush /Java Blog /Random-TL /Madaling pag-parse ng HTML gamit ang jsoup
Stanislav
Antas
Москва

Madaling pag-parse ng HTML gamit ang jsoup

Nai-publish sa grupo
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 klase Documentmula 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 Agentay isang identifier na ipinapaalam sa site na binibisita. Sa maraming mga site ito ang pinakamahalagang pamantayan para sa filter na antispam. Referrernaglalaman ng URL ng pinagmulan ng kahilingan. Ang pamamaraan get()ay nagtatapon ng isang pinangangasiwaan na IOException, upang maaari naming ibalot ang lahat sa try/catchisang 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 divng block na may tinukoy na klase, na gagamitin namin para sa sampling. Madaling pag-parse ng HTML gamit ang jsoup - 1Gamitin natin ang klase Elementsmula 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: Madaling pag-parse ng HTML gamit ang jsoup - 2Ngayon 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 pag-parse ng HTML gamit ang jsoup - 3Madaling 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());

Konklusyon

Ang halimbawang ito ay nagpapakita lamang ng isang maliit na bahagi ng kung ano ang kaya ng jsoup. Mayroon ding katotohanan na ang mga site ay madalas na na-update, binabago ang istraktura ng markup code, kaya kapag nagtatrabaho sa pag-scrape, kailangan mong maging handa na umangkop sa mga pagbabago. Makakakuha ka ng higit pang impormasyon at ang kasalukuyang bersyon sa opisyal na website na jsoup.org ; maaari kang magbasa ng higit pa tungkol sa mga klase at pamamaraan sa link na o7planning.org . Mag-iiwan ako ng link sa aking github , sa oras ng pagsulat ay may ilang Telegram bot na gumagamit ng Jsoup upang tumanggap at magpakita ng impormasyon.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION