Mungkin suatu hari nanti anda perlu mendapatkan maklumat daripada tapak web atau dokumen HTML dalam aplikasi anda, dan saya akan katakan tanpa berlengah lagi bahawa menggunakan perpustakaan jsoup akan memudahkan tugas anda. Menurut wiki , jsoup ialah perpustakaan Java sumber terbuka yang direka untuk menghurai, mengekstrak dan memanipulasi data yang disimpan dalam dokumen HTML.
Permulaan yang cepat
Perpustakaan boleh dimuat turun sebagai fail balang dan diletakkan dalam projek, atau disambungkan menggunakan Maven/Gradle. Saya akan meninggalkan pautan ke laman web rasmi di penghujung artikel: di sana anda boleh menemui versi perpustakaan semasa. Dalam contoh kita akan menggunakan sambungan melalui Maven. Mari tambahkan kebergantungan:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
Penggunaan
Pertama sekali, anda perlu mendapatkan contoh kelasDocument
daripada org.jsoup.nodes.Document yang menunjukkan sumber untuk penghuraian. Ia boleh sama ada fail tempatan atau pautan. Sebagai contoh, dalam artikel ini kami akan menggunakan laman web yandex.ru dan cuba mendapatkan suapan berita semasa mereka:
Document doc = Jsoup.connect("https://yandex.ru/")
.userAgent("Chrome/4.0.249.0 Safari/532.5")
.referrer("http://www.google.com")
.get();
User Agent
ialah pengecam yang dikomunikasikan kepada tapak yang dilawati. Pada kebanyakan tapak, ia adalah kriteria paling penting untuk penapis antispam. Referrer
mengandungi URL sumber permintaan. Kaedah ini get()
melemparkan IOException yang dikendalikan, jadi kita boleh membungkus semuanya dalam try/catch
satu blok, atau hanya membuangnya lebih jauh dengan throws
. Kami kini telah menerima kod sumber untuk halaman ini. Jika perlu, perpustakaan jsoup itu sendiri boleh memulihkan elemen yang rosak. Sekarang apa yang perlu kita lakukan ialah menyempitkan carian kepada blok yang berasingan. Kaedah ini select()
mempunyai banyak pilihan kegunaan: ia membolehkan anda mencari elemen mengikut tag, atribut, kelas dan parameter lain. Hampir semua penyemak imbas moden menyokong keupayaan untuk mencari kod sumber elemen yang dipilih dengan cepat. Dengan manipulasi mudah, kami mencari kod sumber elemen yang kami perlukan dan mendapatkan div
blok dengan kelas yang ditentukan, yang akan kami gunakan untuk pensampelan. Mari gunakan kelas Elements
daripada org.jsoup.select.Elements untuk memilih semua elemen daripada blok pilihan kami.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Sekarang kita mempunyai sesuatu seperti ini: Sekarang semua yang kita perlu lakukan ialah menggunakan gelung kecil untuk melelaran melalui semua elemen:
for (Element element : listNews.select("a"))
System.out.println(element.text());
Kaedah ini text()
membolehkan anda membuang kod penanda dan meninggalkan hanya gabungan teks untuk semua elemen masuk. Keputusan pelaksanaan adalah seperti berikut: Adalah mudah untuk melihat bahawa bilangan sebenar baris yang diterima tidak sepadan dengan paparan sebenar pada halaman. Di sinilah letak perangkapnya. Jika anda melihat pada kod sumber penanda, anda akan melihat bahawa berita terkini berubah secara animasi pada selang masa tertentu. Sebahagian daripada "batu" ini diselesaikan dengan pensampelan tambahan, dan sudah tentu, ujian. Nampaknya lima elemen pertama akan mengandungi maklumat yang kami perlukan, dan elemen keenam hanya akan mengandungi baris kosong berskrip. Ia juga berlaku bahawa blok tidak akan mempunyai sebarang pengecam, maka adalah mungkin untuk terus menunjuk menggunakan kaedah get(int index)
ke nombor kedudukan elemen yang dipersoalkan.
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION