有兩個不錯的庫:
乙個是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。charset, _ := dcharset.attr("content")
例2:
logo := doc.find("#retina_logo")這個是根據html中的id來選擇dom
例3:
bread := doc.find("div.blkbreadcrumblink")選擇doc中class為blkbreadcrumblink的div
例4:
var faceimg string例5:var innerimg = string{}
imgpath, exists := s.find("img").attr("src")
if !exists
if i == 0
})
dom_node := doc.find("[bosszone='zttopic']").find("a")這個是根據屬性/值來查詢相應的元素
func clear_dom(pn *html.node, isgb2312 bool) error else if tn == "a"其中conver_dom是對node節點的text進行轉碼操作,如果不需要,可以忽略。} 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
}
func nodehtml(n *html.node) string )上面的兩個函式,分別獲取節點的html**和text**。html**和text**的區別是,html**是原封不動的html**,text**僅僅顯示html**的內容,例如一段html: 例子,它的text**是」例子」html.render(buf, n)
return buf.string()
}func nodetext(node *html.node) string else if node.firstchild != nil
return buf.string()
} return ""
}
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 子句中不能使...