Rumah > Artikel > pembangunan bahagian belakang > Panduan Bermula: Kuasai konsep asas pelaksanaan perangkak dalam bahasa Go
Mulakan dengan pantas: Pelajari pengetahuan asas bahasa Go untuk melaksanakan perangkak, anda memerlukan contoh kod khusus
Ikhtisar
Dengan perkembangan pesat Internet, jumlah maklumat yang besar dan berkembang, cara mendapatkan maklumat yang berguna daripada data besar-besaran telah menjadi Misi kritikal. Sebagai alat pemerolehan data automatik, perangkak telah menarik banyak perhatian dan perhatian daripada pembangun. Sebagai bahasa dengan prestasi cemerlang, keupayaan selaras yang kukuh dan mudah dipelajari, bahasa Go digunakan secara meluas dalam pembangunan perangkak.
Artikel ini akan memperkenalkan pengetahuan asas pelaksanaan perangkak dalam bahasa Go, termasuk penghuraian URL, permintaan HTTP, penghuraian HTML, pemprosesan serentak, dll., digabungkan dengan contoh kod khusus untuk membantu pembaca bermula dengan cepat.
Berikut ialah contoh mudah:
package main import ( "fmt" "net/url" ) func main() { u, err := url.Parse("https://www.example.com/path?query=1#fragment") if err != nil { fmt.Println("parse error:", err) return } fmt.Println("Scheme:", u.Scheme) // 输出:https fmt.Println("Host:", u.Host) // 输出:www.example.com fmt.Println("Path:", u.Path) // 输出:/path fmt.Println("RawQuery:", u.RawQuery) // 输出:query=1 fmt.Println("Fragment:", u.Fragment) // 输出:fragment }
Dengan memanggil fungsi url.Parse, kami menghuraikan URL ke dalam struktur url.URL dan boleh mengakses pelbagai komponennya, seperti Skim (protokol), nama Hos (hos) ), Laluan (laluan), RawQuery (parameter pertanyaan) dan Fragmen (serpihan).
Berikut adalah contoh:
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get("https://www.example.com") if err != nil { fmt.Println("request error:", err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("read error:", err) return } fmt.Println(string(body)) }
Dengan memanggil fungsi http.Get, kami boleh menghantar permintaan GET dan mendapatkan data yang dikembalikan oleh pelayan. Kandungan entiti respons boleh diperolehi melalui resp.Body, baca menggunakan fungsi ioutil.ReadAll dan ditukarkan kepada rentetan untuk output.
Berikut ialah contoh:
package main import ( "fmt" "log" "net/http" "github.com/PuerkitoBio/goquery" ) func main() { resp, err := http.Get("https://www.example.com") if err != nil { log.Fatal(err) } defer resp.Body.Close() doc, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { log.Fatal(err) } doc.Find("h1").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text()) }) }
Dengan memanggil fungsi goquery.NewDocumentFromReader, kita boleh menghuraikan kandungan entiti respons HTTP ke dalam objek goquery.Document, dan kemudian gunakan kaedah Cari objek ini untuk mencari elemen HTML tertentu dan Ia menjalankan pemprosesan, seperti mengeluarkan kandungan teks.
Berikut ialah contoh:
package main import ( "fmt" "log" "net/http" "sync" "github.com/PuerkitoBio/goquery" ) func main() { urls := []string{"https://www.example.com", "https://www.example.org", "https://www.example.net"} var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(url string) { defer wg.Done() resp, err := http.Get(url) if err != nil { log.Fatal(err) } defer resp.Body.Close() doc, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { log.Fatal(err) } doc.Find("h1").Each(func(i int, s *goquery.Selection) { fmt.Println(url, s.Text()) }) }(url) } wg.Wait() }
Dengan menggunakan sync.WaitGroup dan goroutine, kami boleh memproses berbilang URL secara serentak dan menunggu mereka menyelesaikan pelaksanaannya. Dalam setiap goroutine, kami menghantar permintaan HTTP dan menghuraikan HTML, akhirnya mengeluarkan kandungan teks.
Kesimpulan
Artikel ini memperkenalkan pengetahuan asas pelaksanaan perangkak dalam bahasa Go, termasuk penghuraian URL, permintaan HTTP, penghuraian HTML dan pemprosesan serentak, dsb., dan menerangkannya dengan contoh kod khusus. Saya berharap selepas membaca artikel ini, pembaca boleh mula menggunakan bahasa Go dengan cepat untuk membangunkan program perangkak yang cekap.
Atas ialah kandungan terperinci Panduan Bermula: Kuasai konsep asas pelaksanaan perangkak dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!