JavaRush /Blog Java /Random-MS /Penghuraian HTML mudah dengan jsoup
Stanislav
Tahap
Москва

Penghuraian HTML mudah dengan jsoup

Diterbitkan dalam kumpulan
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 kelas Documentdaripada 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 Agentialah pengecam yang dikomunikasikan kepada tapak yang dilawati. Pada kebanyakan tapak, ia adalah kriteria paling penting untuk penapis antispam. Referrermengandungi URL sumber permintaan. Kaedah ini get()melemparkan IOException yang dikendalikan, jadi kita boleh membungkus semuanya dalam try/catchsatu 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 divblok dengan kelas yang ditentukan, yang akan kami gunakan untuk pensampelan. Penghuraian HTML mudah menggunakan jsoup - 1Mari gunakan kelas Elementsdaripada 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: Penghuraian HTML mudah menggunakan jsoup - 2Sekarang 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: Penghuraian HTML mudah menggunakan jsoup - 3Adalah 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());

Kesimpulan

Contoh ini menunjukkan hanya sebahagian kecil daripada apa yang jsoup mampu. Terdapat juga fakta bahawa tapak sering dikemas kini, mengubah struktur kod markup, jadi apabila bekerja dengan mengikis, anda perlu bersedia untuk menyesuaikan diri dengan perubahan. Anda boleh mendapatkan maklumat lanjut dan versi semasa di laman web rasmi jsoup.org ; anda boleh membaca lebih lanjut mengenai kelas dan kaedah di pautan o7planning.org . Saya akan meninggalkan pautan ke github saya , pada masa penulisan terdapat beberapa bot Telegram yang menggunakan Jsoup untuk menerima dan memaparkan maklumat.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION