Rumah  >  Artikel  >  pembangunan bahagian belakang  >  html pertanyaan golang

html pertanyaan golang

WBOY
WBOYasal
2023-05-19 10:46:07673semak imbas

Kata Pengantar

Pembangunan bahasa pengaturcaraan telah membawa kita kemungkinan yang tidak terhingga. Sebagai bahasa pengaturcaraan moden, bahasa Go mempunyai banyak kelebihan seperti kecekapan, kesederhanaan, dan platform merentas Ia digunakan secara meluas dalam pengaturcaraan bahagian pelayan, pengkomputeran awan, bekas dan bidang lain. Artikel ini akan memperkenalkan cara menggunakan perpustakaan pihak ketiga untuk menanyakan dokumen HTML dalam Go.

1. Bahasa Go dan HTML

HTML ialah bahasa penanda yang digunakan untuk membina halaman web. Ia boleh menentukan struktur dan gaya elemen dan digunakan dengan teknologi lain seperti CSS dan JavaScript untuk mencapai kesan interaktif yang kompleks. Bahasa Go ialah bahasa pengaturcaraan selamat serentak yang disusun, ditaip secara statik, yang terkenal dengan kecekapannya. Walaupun bahasa Go itu sendiri tidak menyokong penghuraian HTML secara langsung, kami boleh menyelesaikan tugas ini dengan menggunakan perpustakaan pihak ketiga.

2. Penghuraian HTML dalam bahasa Go

Dalam bahasa Go, kita boleh menggunakan pelbagai alatan untuk menghuraikan dokumen HTML, seperti golang.org/x/net/html, github.com/PuerkitoBio/goquery, dsb. Alat ini menyediakan satu set kaedah dan struktur untuk menghuraikan, melintasi dan mengubah suai dokumen HTML.

2.1 Penggunaan golang.org/x/net/html

golang.org/x/net/html ialah perpustakaan standard yang disediakan oleh bahasa Go, yang menyediakan API yang kaya untuk menghuraikan dokumen HTML. Seterusnya, kami akan menunjukkan cara menggunakan perpustakaan untuk menanyakan data nod dalam dokumen HTML.

Berikut ialah dokumen HTML mudah:

<!DOCTYPE html>
<html>
  <head>
    <title>A Simple HTML Document</title>
  </head>
  <body>
    <h1>This is a heading</h1>
    <p>This is a paragraph.</p>
    <p>This is another paragraph.</p>
  </body>
</html>

Kami kini ingin menanyakan kandungan teks semua nod perenggan (tege388a4556c0f65e1904146cc1a846bee) dalam dokumen ini. Mula-mula, kita perlu menghuraikan dokumen HTML ke dalam struktur pepohon DOM, dan kemudian menanyakan data nod dengan merentasi pepohon DOM secara rekursif.

package main

import (
    "fmt"
    "golang.org/x/net/html"
    "strings"
)

var htmlString = `
<!DOCTYPE html>
<html>
  <head>
    <title>A Simple HTML Document</title>
  </head>
  <body>
    <h1>This is a heading</h1>
    <p>This is a paragraph.</p>
    <p>This is another paragraph.</p>
  </body>
</html>
`

func main() {
    reader := strings.NewReader(htmlString)
    doc, err := html.Parse(reader)
    if err != nil {
        fmt.Println("Failed to parse HTML string:", err)
        return
    }
    var find func(*html.Node)
    find = func(n *html.Node) {
        if n.Type == html.ElementNode && n.Data == "p" {
            fmt.Println(n.FirstChild.Data)
        } else {
            for c := n.FirstChild; c != nil; c = c.NextSibling {
                find(c)
            }
        }
    }
    find(doc)
}

Dalam kod di atas, kami menggunakan strings.NewReader() untuk menukar rentetan kepada io.Taip antara muka Pembaca dan hantar ke fungsi html.Parse() untuk menghuraikan dokumen HTML. Kemudian, kami mentakrifkan fungsi rekursif bernama find() yang merentasi pepohon DOM dan mencari nod yang memenuhi kriteria. Apabila nod perenggan ditemui, kami mengeluarkan kandungan teks nod itu. Akhir sekali, kami memanggil fungsi find() untuk bertanya dan mengeluarkan kandungan teks semua nod perenggan.

2.2 Menggunakan github.com/PuerkitoBio/goquery

github.com/PuerkitoBio/goquery ialah pustaka bahasa Go yang popular yang menyediakan cara yang mudah dan mudah untuk penghuraian dan pertanyaan HTML. Kita boleh menggunakan goquery untuk melintasi dan menanyakan dokumen HTML tanpa perlu memahami struktur pepohon DOM.

Berikut ialah contoh dokumen HTML:

<!DOCTYPE html>
<html>
  <head>
    <title>A Simple HTML Document</title>
  </head>
  <body>
    <h1>This is a heading</h1>
    <p>This is a paragraph.</p>
    <p>This is another paragraph.</p>
  </body>
</html>

Kami kini ingin menanyakan kandungan teks semua nod perenggan dalam dokumen, yang boleh dicapai dengan mudah menggunakan goquery:

package main

import (
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "strings"
)

var htmlString = `
<!DOCTYPE html>
<html>
  <head>
    <title>A Simple HTML Document</title>
  </head>
  <body>
    <h1>This is a heading</h1>
    <p>This is a paragraph.</p>
    <p>This is another paragraph.</p>
  </body>
</html>
`

func main() {
    reader := strings.NewReader(htmlString)
    doc, err := goquery.NewDocumentFromReader(reader)
    if err != nil {
        fmt.Println("Failed to parse HTML string:", err)
        return
    }
    doc.Find("p").Each(func(i int, s *goquery.Selection) {
        fmt.Println(s.Text())
    })
}

dalam Dalam kod di atas, kami menggunakan strings.NewReader() untuk menukar rentetan kepada io.Jenis antara muka Pembaca dan hantar ke fungsi goquery.NewDocumentFromReader() untuk menghuraikan dokumen HTML. Kemudian, kami menggunakan doc.Find("p") untuk menanyakan semua nod perenggan dan mengeluarkan kandungan teksnya melalui kaedah s.Text().

3. Ringkasan

Artikel ini memperkenalkan cara untuk menanyakan kandungan dokumen HTML dalam bahasa Go. Kami meneroka dua pendekatan berbeza, menggunakan golang.org/x/net/html dan github.com/PuerkitoBio/goquery. Alat ini bukan sahaja dapat menghuraikan dokumen HTML, tetapi juga menyediakan API yang kaya untuk melintasi dan memanipulasi pepohon DOM. Tidak kira kaedah yang anda pilih, anda boleh mendapatkan data dengan mudah daripada dokumen HTML, membantu anda membina aplikasi yang lebih elegan dan cekap.

Atas ialah kandungan terperinci html pertanyaan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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
Artikel sebelumnya:golang melaksanakan atoiArtikel seterusnya:golang melaksanakan atoi