Как в goquery правильно выбрать tr and td?

В библиотеке Go - goquery, которая предоставляет удобный инструментарий для парсинга HTML, можно использовать сочетание селекторов, чтобы правильно выбрать элементы HTML, такие как <tr> и <td>, на основе их тегов или атрибутов.

Для выбора <tr> и <td> можно использовать следующий селектор:

package main

import (
	"fmt"
	"log"
	"strings"

	"github.com/PuerkitoBio/goquery"
)

func main() {
	html := `
	<table>
	  <tr>
	    <td>Cell 1</td>
	    <td>Cell 2</td>
	  </tr>
	  <tr>
	    <td>Cell 3</td>
	    <td>Cell 4</td>
	  </tr>
	</table>
	`

	reader := strings.NewReader(html)
	doc, err := goquery.NewDocumentFromReader(reader)
	if err != nil {
		log.Fatal(err)
	}

	doc.Find("tr").Each(func(i int, tr *goquery.Selection) {
		fmt.Printf("Row %d:n", i+1)
		tr.Find("td").Each(func(j int, td *goquery.Selection) {
			fmt.Printf("  Column %d: %sn", j+1, td.Text())
		})
		fmt.Println()
	})
}

Обратите внимание, что мы используем функцию Find() для выбора элементов <tr>, а затем внутри функции Each() выполняем итерацию по этим <tr> и снова используем функцию Find() для выбора элементов <td> в каждом <tr>. Затем можно получить текстовое содержимое каждого <td> с помощью метода Text().

В результате выполнения приведенного выше кода будет выведено:

Row 1:
  Column 1: Cell 1
  Column 2: Cell 2

Row 2:
  Column 1: Cell 3
  Column 2: Cell 4

Таким образом, мы успешно выбрали все <tr> и <td> элементы в таблице и вывели текстовое содержимое каждой ячейки.