Mungkin suatu hari nanti Anda perlu mendapatkan informasi dari situs web atau dokumen HTML di aplikasi Anda, dan saya akan mengatakan tanpa basa-basi lagi bahwa menggunakan perpustakaan jsoup akan sangat menyederhanakan tugas Anda. Menurut wiki , jsoup adalah perpustakaan Java open source yang dirancang untuk mengurai, mengekstraksi, dan memanipulasi data yang disimpan dalam dokumen HTML.
Mulai cepat
Pustaka dapat diunduh sebagai file jar dan ditempatkan dalam proyek, atau dihubungkan menggunakan Maven/Gradle. Saya akan meninggalkan tautan ke situs resminya di akhir artikel: di sana Anda dapat menemukan versi perpustakaan saat ini. Dalam contoh kita akan menggunakan koneksi melalui Maven. Mari tambahkan ketergantungan:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
Penggunaan
Pertama-tama, Anda perlu mendapatkan instance kelasDocument
dari org.jsoup.nodes.Document yang menunjukkan sumber penguraian. Ini bisa berupa file lokal atau tautan. Misalnya, dalam artikel ini kita akan menggunakan situs web yandex.ru dan mencoba mendapatkan feed berita terkini:
Document doc = Jsoup.connect("https://yandex.ru/")
.userAgent("Chrome/4.0.249.0 Safari/532.5")
.referrer("http://www.google.com")
.get();
User Agent
adalah pengidentifikasi yang dikomunikasikan ke situs yang dikunjungi. Di banyak situs, ini adalah kriteria terpenting untuk filter antispam. Referrer
berisi URL sumber permintaan. Metode ini get()
melempar IOException yang ditangani, sehingga kita dapat menggabungkan semuanya dalam try/catch
satu blok, atau membuangnya lebih jauh dengan throws
. Kami sekarang telah menerima kode sumber untuk halaman ini. Jika perlu, perpustakaan jsoup sendiri dapat memulihkan elemen yang rusak. Sekarang yang harus kita lakukan adalah mempersempit pencarian ke blok terpisah. Metode ini select()
memiliki banyak pilihan kegunaan: memungkinkan Anda mencari elemen berdasarkan tag, atribut, kelas, dan parameter lainnya. Hampir semua browser modern mendukung kemampuan mencari kode sumber elemen yang dipilih dengan cepat. Dengan manipulasi sederhana, kita menemukan kode sumber elemen yang kita perlukan dan mendapatkan div
blok dengan kelas yang ditentukan, yang akan kita gunakan untuk pengambilan sampel. Mari gunakan kelas Elements
dari org.jsoup.select.Elements untuk memilih semua elemen dari blok yang kita pilih.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Sekarang kita mempunyai sesuatu seperti ini: Sekarang yang harus kita lakukan adalah menggunakan loop kecil untuk mengulangi semua elemen:
for (Element element : listNews.select("a"))
System.out.println(element.text());
Metode ini text()
memungkinkan Anda membuang kode markup dan hanya menyisakan kombinasi teks untuk semua elemen yang masuk. Hasil eksekusinya adalah sebagai berikut: Sangat mudah untuk melihat bahwa jumlah baris sebenarnya yang diterima tidak sesuai dengan tampilan sebenarnya pada halaman. Di sinilah letak jebakannya. Jika Anda melihat kode sumber markup, Anda akan melihat bahwa berita terbaru berubah secara animasi pada interval waktu tertentu. Beberapa dari “batu” ini dipecahkan dengan pengambilan sampel tambahan, dan tentu saja, pengujian. Ternyata lima elemen pertama berisi informasi yang kita perlukan, dan elemen keenam hanya berisi baris kosong skrip. Hal ini juga terjadi bahwa blok tidak memiliki pengidentifikasi apa pun, maka dimungkinkan untuk langsung menunjuk menggunakan metode get(int index)
ke nomor posisi elemen yang dimaksud.
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION