Bagaimana untuk menghentikan crawler di golang
Dengan perkembangan Internet, teknologi crawler secara beransur-ansur menjadi salah satu alat penting untuk mendapatkan maklumat rangkaian. Orang ramai boleh menggunakan teknologi perangkak untuk mendapatkan sejumlah besar data daripada tapak web untuk membuat analisis dan ramalan yang lebih tepat. Walau bagaimanapun, crawler juga menghadapi banyak kesukaran dan batasan Terutama dalam pengaturcaraan Golang, menghentikan crawler masih menjadi masalah biasa.
Golang ialah bahasa pengaturcaraan yang agak baharu, dan kemunculannya telah menarik perhatian meluas. Berbanding dengan bahasa lain, bahasa Go mempunyai kelebihan kecekapan, kesederhanaan, konkurensi, dll., jadi ia telah digunakan secara meluas dalam pengaturcaraan rangkaian, pengaturcaraan sistem, pengkomputeran awan dan bidang lain. Walau bagaimanapun, apabila menggunakan Golang dalam pengaturcaraan perangkak, kita juga perlu memberi perhatian kepada beberapa isu.
Secara umumnya, penulisan crawler melibatkan dua operasi asas, iaitu meminta halaman web dan menghuraikan halaman web. Pustaka standard Golang menyediakan dua pakej, "net/http" dan "goquery", yang digunakan untuk menghantar permintaan dan menghuraikan dokumen HTML masing-masing. Kami boleh menggunakan alatan ini untuk melaksanakan program perangkak yang lengkap Kodnya adalah seperti berikut:
package main import ( "fmt" "github.com/PuerkitoBio/goquery" "net/http" ) func main() { // Step 1: 发送请求 url := "https://www.example.com" req, _ := http.NewRequest("GET", url, nil) req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3") client := &http.Client{} resp, _ := client.Do(req) defer resp.Body.Close() // Step 2: 解析网页 doc, _ := goquery.NewDocumentFromReader(resp.Body) doc.Find("a").Each(func(i int, s *goquery.Selection) { href, _ := s.Attr("href") fmt.Println(href) }) }
Dalam kod ini, kami mula-mula menggunakan pakej "net/http" untuk menghantar permintaan HTTP, dan kemudian menggunakan " goquery "Pakej menghuraikan dokumen HTML untuk mendapatkan semua pautan dalam halaman web sasaran. Pada ketika ini, kita mungkin perlu mempertimbangkan cara untuk menghentikan pelaksanaan program perangkak.
Pendekatan biasa ialah menetapkan pembilang dan menghentikan perangkak apabila ia mencapai nilai tertentu. Dalam bahasa Go, anda boleh menggunakan penyataan "pilih" dan pembolehubah jenis "chan" untuk melaksanakan fungsi pemasa. Operasi khusus adalah seperti berikut:
package main import ( "fmt" "github.com/PuerkitoBio/goquery" "net/http" "time" ) func main() { url := "https://www.example.com" req, _ := http.NewRequest("GET", url, nil) req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3") client := &http.Client{} resp, _ := client.Do(req) defer resp.Body.Close() doc, _ := goquery.NewDocumentFromReader(resp.Body) done := make(chan int) go func() { doc.Find("a").Each(func(i int, s *goquery.Selection) { href, _ := s.Attr("href") fmt.Println(href) if i == 10 { //停止条件 done <- 1 } }) }() select { case <-done: fmt.Println("Done!") case <-time.After(time.Second * 10): fmt.Println("Time out!") } }
Dalam contoh ini, kami menggunakan pembolehubah "done" jenis "chan" untuk berkomunikasi Apabila kaunter mencapai nilai tertentu, mesej dihantar ke utama proses melalui pembolehubah "selesai" Ini menghentikan program perangkak daripada berjalan. Pada masa yang sama, kami juga menetapkan pemasa 10 saat Jika tugas merangkak tidak dapat diselesaikan dalam masa 10 saat, program akan berhenti secara automatik.
Untuk meringkaskan, dalam pengaturcaraan Golang, kita boleh menggunakan pakej "net/http" dan "goquery" dalam perpustakaan standard untuk menghantar permintaan dan menghuraikan dokumen HTML Pada masa yang sama, gunakan pernyataan "pilih". dan pembolehubah jenis "chan " untuk melaksanakan fungsi pemasa dan komunikasi. Alat ini boleh membantu kami menulis program perangkak yang cekap dan stabil, menghentikan pelaksanaan program tepat pada masanya apabila perlu dan mengelakkan pembaziran data yang tidak diperlukan dan penggunaan sumber pengkomputeran.
Atas ialah kandungan terperinci Bagaimana untuk menghentikan crawler di golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Artikel ini menerangkan mekanisme import pakej Go: Dinamakan import (mis., Import & quot; fmt & quot;) dan import kosong (mis., Import _ & quot; fmt & quot;). Dinamakan import membuat kandungan pakej boleh diakses, sementara import kosong hanya melaksanakan t

Artikel ini menerangkan fungsi Newflash () Beego untuk pemindahan data antara halaman dalam aplikasi web. Ia memberi tumpuan kepada menggunakan NewFlash () untuk memaparkan mesej sementara (kejayaan, kesilapan, amaran) antara pengawal, memanfaatkan mekanisme sesi. Limita

Artikel ini memperincikan penukaran yang cekap hasil pertanyaan MySQL ke dalam kepingan struct go. Ia menekankan menggunakan kaedah imbasan pangkalan data/SQL untuk prestasi optimum, mengelakkan parsing manual. Amalan terbaik untuk pemetaan medan struct menggunakan tag db dan robus

Artikel ini menunjukkan penciptaan dan stub di GO untuk ujian unit. Ia menekankan penggunaan antara muka, menyediakan contoh pelaksanaan mengejek, dan membincangkan amalan terbaik seperti menjaga mocks fokus dan menggunakan perpustakaan penegasan. Articl

Artikel ini meneroka kekangan jenis adat Go untuk generik. Ia memperincikan bagaimana antara muka menentukan keperluan jenis minimum untuk fungsi generik, meningkatkan keselamatan jenis dan kebolehgunaan semula kod. Artikel ini juga membincangkan batasan dan amalan terbaik

Artikel ini memperincikan penulisan fail yang cekap di GO, membandingkan OS.WriteFile (sesuai untuk fail kecil) dengan os.openfile dan buffered menulis (optimum untuk fail besar). Ia menekankan pengendalian ralat yang teguh, menggunakan penangguhan, dan memeriksa kesilapan tertentu.

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Artikel ini meneroka menggunakan alat pengesanan untuk menganalisis aliran pelaksanaan aplikasi GO. Ia membincangkan teknik instrumentasi manual dan automatik, membandingkan alat seperti Jaeger, Zipkin, dan OpenTelemetry, dan menonjolkan visualisasi data yang berkesan
