まえがき
プログラミング言語の発展は、私たちに無限の可能性をもたらしました。最新のプログラミング言語である Go 言語は、効率性、シンプルさ、クロスプラットフォームなどの多くの利点を備えており、サーバーサイド プログラミング、クラウド コンピューティング、コンテナーなどの分野で広く使用されています。この記事では、サードパーティのライブラリを使用して Go で HTML ドキュメントをクエリする方法を紹介します。
1. Go 言語と HTML
HTML は、Web ページの構築に使用されるマークアップ言語です。要素の構造とスタイルを指定し、CSS や JavaScript などの他のテクノロジとともに使用して、複雑なインタラクティブな効果を実現できます。 Go 言語は、コンパイルされ、静的に型指定され、同時実行安全なプログラミング言語であり、その効率性で知られています。 Go 言語自体は HTML 解析を直接サポートしていませんが、サードパーティのライブラリを使用することでこのタスクを実行できます。
2. Go 言語での HTML 解析
Go 言語では、golang.org/x/net/html# などのさまざまなツールを使用して HTML ドキュメントを解析できます。 ##、
github.com/PuerkitoBio/goquery など。これらのツールは、HTML ドキュメントの解析、走査、および変更のための一連のメソッドと構造を提供します。
golang.org/x/net/html
golang.org/x/net/html を使用します。これは Go 言語によって提供されます。 HTML ドキュメントを解析するための豊富な API を提供する標準ライブラリ。次に、ライブラリを使用して 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>次に、このドキュメント内のすべての段落ノード (
e388a4556c0f65e1904146cc1a846bee タグ) のテキスト コンテンツをクエリしたいとします。まず、HTML ドキュメントを DOM ツリー構造に解析し、DOM ツリーを再帰的に走査してノード データをクエリする必要があります。
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) }上記のコードでは、
strings.NewReader() を使用して文字列を io.Reader インターフェイス型に変換し、それを
html.Parse() HTML文書を解析する関数。次に、
find() という名前の再帰関数を定義して、DOM ツリーを走査し、条件を満たすノードを見つけます。段落ノードが見つかると、そのノードのテキスト コンテンツが出力されます。最後に、
find() 関数を呼び出して、すべての段落ノードのテキスト コンテンツをクエリして出力します。
github.com/PuerkitoBio/goquery
github.com/PuerkitoBio/goquery は非常に人気のある Go 言語ライブラリです。 HTML の解析とクエリを実行するためのシンプルで便利な方法です。
goquery を使用すると、DOM ツリーの構造を深く掘り下げることなく、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>次に、ドキュメント内のすべての段落ノードのテキスト コンテンツをクエリしたいと思います。これは、
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()) }) }上記のコードでは、
strings.NewReader() を使用して文字列を io.Reader インターフェイス型に変換し、それを
goquery.NewDocumentFromReader() に渡します。 HTML ドキュメントを解析する 関数。次に、
doc.Find("p") を使用してすべての段落ノードをクエリし、
s.Text() メソッドを通じてそのテキスト コンテンツを出力します。
golang.org/x/net/html と
github.com/PuerkitoBio/goquery を使用した 2 つの異なるアプローチを検討しました。これらのツールは、HTML ドキュメントを解析できるだけでなく、DOM ツリーを走査して操作するための豊富な API も提供します。どの方法を選択しても、HTML ドキュメントからデータを簡単に取得できるため、よりエレガントで効率的なアプリケーションを構築できます。
以上がgolangクエリhtmlの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。