Мүмкін бір күні сізге веб-сайттан немесе қолданбаңыздағы HTML құжатынан ақпарат алу қажет болуы мүмкін және мен jsoup кітапханасын пайдалану тапсырмаңызды айтарлықтай жеңілдететінін айтамын. Викиге сәйкес , jsoup HTML құжаттарында сақталған деректерді талдауға, шығаруға және өңдеуге арналған ашық бастапқы Java кітапханасы.
Жылдам бастау
Кітапхананы jar файлы ретінде жүктеп алуға және жобаға орналастыруға немесе Maven/Gradle арқылы қосуға болады. Мен мақаланың соңында ресми веб-сайтқа сілтеме қалдырамын: онда сіз кітапхананың ағымдағы нұсқасын таба аласыз. Мысалда біз 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
кіретін сайтқа хабарланатын идентификатор болып табылады. Көптеген сайттарда бұл антиспам сүзгісінің ең маңызды критерийі болып табылады. 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