Rumah > pembangunan bahagian belakang > Golang > Cara menggunakan bahasa go untuk membangun dan melaksanakan perangkak web

Cara menggunakan bahasa go untuk membangun dan melaksanakan perangkak web

WBOY
Lepaskan: 2023-08-04 20:24:21
asal
1423 orang telah melayarinya

Cara menggunakan bahasa Go untuk membangunkan dan melaksanakan perangkak web

Pengenalan:
Perangkak web ialah program yang mengekstrak data secara automatik (seperti teks, imej, video, dsb.) Ia menyemak imbas dan mengumpul maklumat secara automatik di Internet. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk membangunkan dan melaksanakan perangkak web serta melampirkan contoh kod yang sepadan.

1. Pengenalan kepada bahasa Go
Bahasa Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google dan pertama kali dikeluarkan pada tahun 2009. Berbanding dengan bahasa pengaturcaraan lain, bahasa Go mempunyai ciri konkurensi yang kuat dan kelajuan pelaksanaan yang cekap, menjadikannya sangat sesuai untuk menulis perangkak web.

2. Langkah pelaksanaan perangkak web

  1. Import pakej berkaitan
    Dalam bahasa Go, kita boleh menggunakan pakej net/http untuk membuat permintaan HTTP dan pakej html untuk menghuraikan dokumen HTML. Pertama, kita perlu mengimport kedua-dua pakej ini. net/http包来进行HTTP请求,使用html包来解析HTML文档。首先,我们需要导入这两个包。
import (
    "fmt"
    "net/http"
    "golang.org/x/net/html"
)
Salin selepas log masuk
  1. 发送HTTP请求
    通过http.Get()函数发送HTTP请求,并将返回的响应保存在resp变量中。
resp, err := http.Get(url)
if err != nil {
   fmt.Println("发送请求时发生错误:", err)
   return
}
defer resp.Body.Close()
Salin selepas log masuk
  1. 解析HTML文档
    使用html.Parse()函数来解析HTML文档,并将返回的文档对象保存在doc
  2. doc, err := html.Parse(resp.Body)
    if err != nil {
       fmt.Println("解析HTML文档时发生错误:", err)
       return
    }
    Salin selepas log masuk
      Hantar permintaan HTTP
        Hantar permintaan HTTP melalui fungsi http.Get() dan simpan respons yang dikembalikan dalam resp</code > tengah berubah-ubah. <li><br><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>func findLinks(n *html.Node) { if n.Type == html.ElementNode &amp;&amp; n.Data == &quot;a&quot; { for _, attr := range n.Attr { if attr.Key == &quot;href&quot; { fmt.Println(attr.Val) } } } for c := n.FirstChild; c != nil; c = c.NextSibling { findLinks(c) } } findLinks(doc)</pre><div class="contentsignin">Salin selepas log masuk</div></div><ol start="3"></li>Menghuraikan dokumen HTML</ol>Gunakan fungsi <code>html.Parse() untuk menghuraikan dokumen HTML dan menyimpan objek dokumen yang dikembalikan dalam doc dalam pembolehubah.
        1. func findLinks(n *html.Node) {
             if n.Type == html.ElementNode && n.Data == "a" {
                for _, attr := range n.Attr {
                   if attr.Key == "href" {
                      fmt.Println(attr.Val)
                   }
                }
             }
             for c := n.FirstChild; c != nil; c = c.NextSibling {
                findLinks(c)
             }
          }
          Salin selepas log masuk

        2. Lintas nod HTML
        Lintas semua nod dalam dokumen HTML secara rekursif dan cari data yang kami perlukan. Di bawah ialah contoh mudah untuk mencari semua pautan dalam dokumen HTML.

        package main
        
        import (
            "fmt"
            "net/http"
            "golang.org/x/net/html"
        )
        
        func findLinks(n *html.Node) {
            if n.Type == html.ElementNode && n.Data == "a" {
                for _, attr := range n.Attr {
                    if attr.Key == "href" {
                        fmt.Println(attr.Val)
                    }
                }
            }
            for c := n.FirstChild; c != nil; c = c.NextSibling {
                findLinks(c)
            }
        }
        
        func main() {
            url := "https://www.example.com"
        
            resp, err := http.Get(url)
            if err != nil {
                fmt.Println("发送请求时发生错误:", err)
                return
            }
            defer resp.Body.Close()
        
            doc, err := html.Parse(resp.Body)
            if err != nil {
                fmt.Println("解析HTML文档时发生错误:", err)
                return
            }
        
            findLinks(doc)
        }
        Salin selepas log masuk


        Hasil keluaran

        Semasa proses traversal, kita boleh memproses dan menyimpan data yang ditemui. Dalam contoh ini, kami hanya mencetak pautan yang ditemui. Contoh kod lengkap Tunggu langkah. Melalui langkah-langkah ini, kami boleh membangunkan program perangkak web mudah dengan mudah.

        Walaupun artikel ini memberikan contoh mudah, dalam aplikasi sebenar, anda juga mungkin perlu mempertimbangkan isu seperti mengendalikan ubah hala halaman, mengendalikan kuki dan menggunakan ungkapan biasa untuk mengekstrak data yang lebih kompleks. Membangunkan perangkak web memerlukan pengendalian dan pematuhan yang teliti terhadap undang-undang, peraturan dan peraturan tapak web yang berkaitan untuk memastikan data dirangkak secara sah dan patuh.

        Bahan rujukan:
        • [laman web rasmi Go language](https://golang.org/)
        • [Go language standard library document](https://golang.org/pkg/)
        • [Go By Contoh](https://gobyexample.com/)
        🎜

        Atas ialah kandungan terperinci Cara menggunakan bahasa go untuk membangun dan melaksanakan perangkak web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    sumber:php.cn
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan