go語言解析html

2021-10-09 19:28:53 字數 1810 閱讀 9438

有兩個不錯的庫:

乙個是html是html的解析器,把html文字解析出來,goquery基於html包,在此基礎上結合cascadia 包(乙個css選擇器工具),實現類似於jquery的功能,操作html非常方便。

使用goquery來查詢,選擇相應的html節點,但如果要對選擇的節點進行修改,刪除操作,還需要深入使用html包。

html包把html文字解析為乙個樹,這個樹有很多node組成,操作的核心就在於對node的操作。

用幾個例子來說明一下吧:

doc, err := goquery.newdocument("")
生成乙個goquery的doc。

goquery用的最多的是find函式,類似於jquery的$(),可以選擇dom結構。

例1:

dhead := doc.find("head")

charset, _ := dcharset.attr("content")

這個例子用來找出頁面的charset。

例2:

logo := doc.find("#retina_logo")
這個是根據html中的id來選擇dom

例3:

bread := doc.find("div.blkbreadcrumblink")
選擇doc中class為blkbreadcrumblink的div

例4:

var faceimg string

var innerimg = string{}

imgpath, exists := s.find("img").attr("src")

if !exists

if i == 0

})

例5:

dom_node := doc.find("[bosszone='zttopic']").find("a")
這個是根據屬性/值來查詢相應的元素

func clear_dom(pn *html.node, isgb2312 bool) error  else if tn == "a" 

} else if tn == "span" else

}case html.commentnode:

tmp := nd

nd = tmp.nextsibling

pn.removechild(tmp)

case html.textnode:

tmp := nd

nd = nd.nextsibling

if err = convert_dom(tmp, isgb2312); err != nil

default:

nd = nd.nextsibling

} }return nil

}

其中conver_dom是對node節點的text進行轉碼操作,如果不需要,可以忽略。

func nodehtml(n *html.node) string )

html.render(buf, n)

return buf.string()

}func nodetext(node *html.node) string else if node.firstchild != nil

return buf.string()

} return ""

}

上面的兩個函式,分別獲取節點的html**和text**。html**和text**的區別是,html**是原封不動的html**,text**僅僅顯示html**的內容,例如一段html: 例子,它的text**是」例子」

go語言解析yaml

關於yaml語法網路上的資料非常多,不做特別整理。個人理解yaml主要是切片 map等資料結構的一種比較容易解讀的格式。go get gopkg.in yaml.v2hostname sunny addr 127.0.0.1 logs name business logpath home work ...

使用go語言解析xml

作業系統 centos 6.9 x64 go語言版本 1.8.3 現有乙個自動報障程式,如果服務出錯會自動給指定人傳送郵件,配置檔案內容如下 default.xml xml version 1.0 encoding utf 8 config smtpserver smtp.163.com smtps...

Go 語言的 Type Switch 語句解析

講述了go語言中 type swith 的用法以及獲取對應變數的一些特殊情況。type switch 是 go 語言中一種特殊的 switch 語句,它比較的是型別而不是具體的值。它判斷某個介面變數的型別,然後根據具體型別再做相應處理。注意,在 type switch 語句的 case 子句中不能使...