亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用golang將HTML表格轉換為數組

如何使用golang將HTML表格轉換為數組

Go
牛魔王的故事 2021-12-20 16:53:54
我在嘗試將 HTML 表轉換為 Golang 數組時遇到問題。我嘗試使用 x/net/html 和 goquery 來實現它,但都沒有成功。假設我們有這個 HTML 表格:<html>  <body>    <table>      <tr>        <td>Row 1, Content 1</td>        <td>Row 1, Content 2</td>        <td>Row 1, Content 3</td>        <td>Row 1, Content 4</td>      </tr>      <tr>        <td>Row 2, Content 1</td>        <td>Row 2, Content 2</td>        <td>Row 2, Content 3</td>        <td>Row 2, Content 4</td>      </tr>    </table>  </body></html>我想以這個數組結束:------------------------------------|Row 1, Content 1| Row 1, Content 2|------------------------------------|Row 2, Content 1| Row 2, Content 2|------------------------------------正如你們所看到的,我只是忽略了內容 3 和 4。我的提取代碼:func extractValue(content []byte) {  doc, _ := goquery.NewDocumentFromReader(bytes.NewReader(content))  doc.Find("table tr td").Each(func(i int, td *goquery.Selection) {    // ...  })}我試圖添加一個控制器編號,它負責忽略<td>我不想轉換和調用的td.NextAll()但沒有運氣。你們知道我應該怎么做才能完成它嗎?
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

您可以golang.org/x/net/html只使用包裹。


var body = strings.NewReader(`                                                                                                                            

        <html>                                                                                                                                            

        <body>                                                                                                                                            

        <table>                                                                                                                                           

        <tr>                                                                                                                                              

        <td>Row 1, Content 1</td>                                                                                                                          

        <td>Row 1, Content 2</td>                                                                                                                          

        <td>Row 1, Content 3</td>                                                                                                                          

        <td>Row 1, Content 4</td>                                                                                                                          

        </tr>                                                                                                                                             

        <tr>                                                                                                                                              

        <td>Row 2, Content 1</td>                                                                                                        

        <td>Row 2, Content 2</td>                                                                                                                          

        <td>Row 2, Content 3</td>                                                                                                                          

        <td>Row 2, Content 4</td>                                                                                                                          

        </tr>  

        </table>                                                                                                                                          

        </body>                                                                                                                                           

        </html>`)          


func main() {

    z := html.NewTokenizer(body)

    content := []string{}


    // While have not hit the </html> tag

    for z.Token().Data != "html" {

        tt := z.Next()

        if tt == html.StartTagToken {

            t := z.Token()

            if t.Data == "td" {

                inner := z.Next()

                if inner == html.TextToken {

                    text := (string)(z.Text())

                    t := strings.TrimSpace(text)

                    content = append(content, t)

                }

            }

        }

    }

    // Print to check the slice's content

    fmt.Println(content)

}

此代碼僅針對這種典型的 HTML 模式編寫,但將其重構為更通用并不難。


查看完整回答
反對 回復 2021-12-20
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

嘗試這樣的方法來制作二維數組并處理可變行大?。?/p>


    z := html.NewTokenizer(body)

    table := [][]string{}

    row := []string{}


    for z.Token().Data != "html" {

        tt := z.Next()

        if tt == html.StartTagToken {

            t := z.Token()


            if t.Data == "tr" {

                if len(row) > 0 {

                    table = append(table, row)

                    row = []string{}

                }

            }


            if t.Data == "td" {

                inner := z.Next()


                if inner == html.TextToken {

                    text := (string)(z.Text())

                    t := strings.TrimSpace(text)

                    row = append(row, t)

                }

            }


        }

    }

    if len(row) > 0 {

        table = append(table, row)

    }


查看完整回答
反對 回復 2021-12-20
  • 2 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號