zoukankan      html  css  js  c++  java
  • Golang读取HTML中Table数据到二维数组

    利用goquery读取html中指定ID的数据保存至二维数组中。

    代码如下:

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "log"
     6     "strings"
     7     "io"
     8 
     9     "github.com/PuerkitoBio/goquery"
    10 )
    11 
    12 func main() {
    13     html := `<html>
    14     <body>
    15         <table id="mydata">
    16             <tr id="one">
    17                 <td>one</td>
    18                 <td>two</td>
    19                 <td>three</td>
    20             </tr>
    21             <tr id="two">
    22                 <td>3</td>
    23                 <td>4</td>
    24                 <td>5</td>
    25             </tr>
    26             <tr id="three">
    27                 <td>八</td>
    28                 <td>九</td>
    29                 <td>十</td>
    30             </tr>
    31             <tr id="four">
    32                 <td>百</td>
    33                 <td>千</td>
    34                 <td>万</td>
    35             </tr>
    36             <tr id="five">
    37                 <td>100</td>
    38                 <td>200</td>
    39                 <td>300</td>
    40             </tr>
    41         </table>
    42         <table id="ayy">
    43             <tr>
    44                 <td>ookk</td>
    45                 <td>aabb</td>
    46             </tr>
    47             <tr>
    48                 <td>ccdd</td>
    49                 <td>eeff</td>
    50             </tr>
    51             <tr>
    52                 <td>1122</td>
    53                 <td>3344</td>
    54             </tr>
    55         </table>
    56     </body>
    57     </html>
    58     `
    59 
    60     var table [][]string = GetHtmlTableData(strings.NewReader(html), "#mydata")
    61 
    62     for trkey,tr := range table {
    63         for tdkey, _ := range tr{
    64             fmt.Printf("%10s	|", table[trkey][tdkey])
    65             if len(tr) == (tdkey+1) {
    66                 fmt.Println("
    ","------------------------------------------------")
    67             }
    68         }
    69     }
    70     table = GetHtmlTableData(strings.NewReader(html), "#ayy")
    71     fmt.Println(table)
    72 }
    73 
    74 func GetHtmlTableData(html io.Reader, tableId string) (table [][]string) {
    75     var tableCache [][]string
    76 
    77     dom,err:=goquery.NewDocumentFromReader(html)
    78     if err != nil{
    79         log.Fatalln(err)
    80     }
    81 
    82     trNum := dom.Find("table"+tableId).Find("tr").Length()
    83     tdNum := dom.Find("table"+tableId).Find("tr").Find("td").Length()
    84 
    85     tableCache = make([][]string, trNum, trNum)
    86     for i:=0; i<trNum; i++{
    87         tableCache[i] = make([]string, tdNum/trNum, tdNum/trNum)
    88         for j:=0; j<(tdNum/trNum); j++ {
    89             tableCache[i][j] = dom.Find(tableId).Find("tr").Find("td").Eq(i*(tdNum/trNum)+j).Text()
    90         }
    91     }
    92 
    93     return tableCache
    94 }

    输出结果如下:

  • 相关阅读:
    Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
    玩转Web之html+CSS(一)---论坛首页表格的实现
    Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
    Android 百度地图 SDK v3.0.0 (一)
    RabbitMQ (五)主题(Topic)
    RabbitMQ (四) 路由选择 (Routing)
    数据结构中的排序算法
    冒泡排序
    hashMap与hashTable的区别
    Java重载与重写的区别
  • 原文地址:https://www.cnblogs.com/merrynuts/p/13130204.html
Copyright © 2011-2022 走看看