Pengikisan web, juga dikenal sebagai ekstraksi data web, adalah metode otomatis untuk mengekstraksi data atau konten dari halaman web.
Pencakar web mengotomatiskan ekstraksi data tanpa campur tangan manusia. Scraper mengakses halaman web dengan mengirimkan permintaan HTTP, seperti halnya browser web. Namun, alih-alih menampilkan HTML yang diambilnya, ia memprosesnya sesuai dengan instruksi Anda dan menyimpan hasilnya.
Scraper web berguna untuk mengambil data dari situs web yang tidak menyediakan API. Mereka populer di bidang-bidang seperti ilmu data, keamanan siber, frontend, dan pengembangan backend.
Pengikisan Web di Go
Di Go, ada berbagai paket web scraping. Yang populer termasuk goquery, Colly, dan ChromeDP.
ChromeDP adalah paket driver web mirip selenium. Ini mendukung protokol alat pengembang Chrome di Go tanpa ketergantungan.
Colly adalah perpustakaan khusus web scraping yang dibuat menggunakan goquery. Tetapi goquery adalah opsi yang lebih cepat untuk menggores situs web di Go.
Apa itu goquery?
Pustaka CSS, jQuery, membantu menginspirasi goquery. Ini adalah perpustakaan Go berdasarkan bersih/html package, yang mengimplementasikan tokenizer dan parser yang sesuai dengan HTML5. Itu juga menggunakan paket Cascadia, yang mengimplementasikan pemilih CSS untuk digunakan dengan parser yang disediakan oleh net/html.
Menginstal goquery
Jalankan perintah di bawah ini di terminal Anda untuk menginstal goquery. Jika Anda menemukan kesalahan, coba perbarui versi Go Anda.
Pergilah dapatkan github.com/PuerkitoBio/goquery
Proses Pengikisan Web
Anda dapat membagi keseluruhan proses pengikisan menjadi tiga tugas yang lebih kecil:
- Membuat Permintaan HTTP.
- Menggunakan pemilih dan pencari untuk mendapatkan data yang dibutuhkan.
- Menyimpan data dalam database atau struktur data untuk diproses lebih lanjut.
Membuat Permintaan HTTP di Go
Anda dapat mengirim permintaan HTTP menggunakan bersih/http paket, yang disertakan oleh perpustakaan standar Go.
kemasan utama
impor "bersih/http"
impor "catatan"
impor "fmt"fungsiutama() {
webUrl := "https://news.ycombinator.com/"
respon, err:= http. Dapatkan (webUrl)
jika salah != nol {
catatan. Fataln (err)
} lainjika tanggapan. Kode Status == 200 {
fmt. Println("Kita bisa mengikis ini")
} lain {
catatan. Fatalln("Jangan digores")
}
}
http. Mendapatkan mengembalikan badan respons dan kesalahan. tanggapan. Kode status adalah kode status permintaan-tanggapan.
Saat membuat permintaan HTTP, jika kode status tanggapan adalah 200 Anda dapat melanjutkan untuk mengikis situs web.
Mendapatkan Data yang Diperlukan Menggunakan goquery
Mendapatkan HTML Situs Web
Pertama, Anda harus mengurai HTML biasa dari respons (respon.body) untuk mendapatkan objek dokumen lengkap yang mewakili halaman web:
dokumen, err := goquery. NewDocumentFromReader (respons. Tubuh)
jika salah != nol {
catatan. Fataln (err)
}
Anda sekarang dapat menggunakan objek dokumen untuk mengakses struktur dan konten halaman web.
Memilih Elemen yang Diperlukan Dari HTML
Anda perlu memeriksa halaman web untuk memeriksa struktur data yang perlu Anda ekstrak. Ini akan membantu Anda membuat pemilih untuk mengaksesnya.
Menggunakan penyeleksi dan pencari, Anda dapat mengekstrak HTML yang Anda butuhkan menggunakan Menemukan metode objek dokumen.
Itu Menemukan metode mengambil pemilih CSS untuk menemukan elemen yang berisi data yang Anda butuhkan:
dokumen. Temukan("sesuatu")
Kode di atas hanya mengembalikan elemen HTML pertama yang cocok dengan pemilih, atau daftar kosong jika tidak ada kecocokan sama sekali.
Memilih Beberapa Elemen Dari HTML
Sebagian besar waktu, Anda ingin mengambil semua elemen HTML yang cocok dengan pemilih Anda.
Anda dapat memilih semua elemen yang cocok dalam HTML menggunakan Setiap metode nilai yang Menemukan() kembali. Itu Setiap metode mengambil fungsi dengan dua parameter: indeks dan pemilih tipe *goquery Pilihan.
dokumen. Temukan("sesuatu").Setiap(fungsi(indeks ke dalam, pemilih *goquery. Pilihan) {
/* Proses pemilih di sini */
})
Di badan fungsi, Anda dapat memilih data spesifik yang Anda inginkan dari HTML. Dalam hal ini, Anda memerlukan tautan dan judul setiap posting di daftar halaman. Menggunakan Menemukan metode parameter pemilih untuk mempersempit kumpulan elemen dan mengekstrak teks atau nilai atribut.
dokumen. Temukan("sesuatu").Setiap(fungsi(indeks ke dalam, pemilih *goquery. Pilihan) {
judul := pemilih. Temukan("td.title").Teks()
tautan, ditemukan := pemilih. Temukan("a.titlelink").Attr("href")
})
Kode di atas memanggil Teks metode hasil dari pemilih. Menemukan untuk mengekstrak isi sel tabel. Memilih atribut—seperti tautan dan URL gambar—mengharuskan Anda menggunakan Attr metode. Metode ini juga mengembalikan nilai yang menunjukkan apakah atribut tersebut ada sama sekali.
Prosesnya sama untuk memilih elemen dan atribut apa pun dari halaman web.
Itu Menemukan metode ini sangat kuat, memungkinkan berbagai operasi untuk memilih dan menemukan elemen HTML. Anda dapat menjelajahi ini di dokumentasi goquery.
Menyimpan Data Tergores
Atribut link dan judul adalah string yang dapat Anda tetapkan ke variabel. Dalam skenario nyata, Anda akan menyimpan ke database atau struktur data untuk manipulasi. Seringkali, struct kustom sederhana sudah cukup.
Buat struct dengan field judul dan tautan dan sepotong struct untuk menampung tipe struct.
Tipe Informasi struktur {
tautan rangkaian
judul rangkaian
}
info := membuat([]Informasi, 0)
Setelah Anda membuat struct dan slice, di isi fungsi metode dokumen, isi irisan dalam fungsi yang Anda berikan ke metode Find. Gunakan tipe struct untuk membuat instance struktur data baru, masing-masing berisi satu hasil.
info = menambahkan(info, Informasi{
judul: judul,
tautan: tautan,
})
Ini menambahkan jenis Informasi(struktur) ke informasi(irisan) dari mana Anda dapat memanipulasi data sesuka Anda.
Mencetak irisan menunjukkan bahwa Anda telah berhasil menggores situs web dan mengisi irisan.
fmt. Println (info)
Masuk akal untuk menyimpan data yang tergores dalam cache lokal sehingga Anda tidak menekan server halaman web lebih dari yang Anda butuhkan. Ini tidak hanya akan mengurangi lalu lintas tetapi juga mempercepat aplikasi Anda karena lebih cepat untuk mengambil data lokal daripada membuat permintaan dan mengikis situs web.
Ada banyak paket database di Go yang bisa Anda gunakan untuk menyimpan data. Itu database/sql paket mendukung database SQL. Ada juga klien database NoSQL seperti: Pengemudi MongoDB Go, dan database tanpa server seperti FaunaDB menggunakan Driver FaunaDB.
Esensi Web Scraping di Go
Jika Anda mencoba mengorek data dari situs web, goquery adalah tempat yang tepat untuk memulai. Tetapi ini adalah paket yang kuat yang dapat melakukan lebih dari sekadar pengikisan web. Anda dapat mengetahui lebih banyak tentang fungsinya di dokumentasi proyek resmi.
Pengikisan web adalah keterampilan penting di berbagai bidang teknologi dan itu akan berguna selama banyak proyek Anda.
Bagaimana Menerapkan Konsep Pemrograman Berorientasi Objek di Go
Baca Selanjutnya
Topik-topik yang berkaitan
- Pemrograman
- Pengembangan web
- Pemrograman
Tentang Penulis
Goodness adalah seorang penulis teknis, pengembang backend, dan analis data, menyederhanakan berbagai topik teknologi saat ia menjelajahi bidang yang menarik ini.
Berlangganan newsletter kami
Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!
Klik di sini untuk berlangganan