我正在学习google's Go programming language。有没有人知道从html网页中提取所有网址的最佳做法?
来自Java世界,有一些库可以完成这项工作,例如jsoup,htmlparser等。但是对于go lang,我想还没有可用的类似库?
答案 0 :(得分:23)
如果你了解jQuery,你会爱上GoQuery。
老实说,它是我在Go中找到的最简单,最强大的HTML实用程序,它基于go.net存储库中的html包。 (好吧,所以它比仅仅是一个解析器更高级,因为它不会暴露原始的HTML令牌等,但是如果你想要用HTML文档实际完成任何事情,这个包将有所帮助。)
答案 1 :(得分:20)
答案 2 :(得分:17)
虽然用于HTML解析的Go包确实仍在进行中,但它可以在go.net存储库中找到。
它的来源位于 code.google.com/p/go.net/html
github.com/golang/net
,并且正在积极开发。
最近提到go-nuts discussion。
请注意,对于Go 1.4(2014年12月),正如我在this answer中提到的那样,该软件包现在是golang.org/x/net
(请参阅godoc)。
答案 3 :(得分:6)
答案 4 :(得分:0)
我刚刚为Go发布了一个基于事件的HTML 5.0开源解析包。你可以find it here
以下是从页面(来自A元素)获取所有链接的示例代码:
links := make([]string)
parser := NewParser(htmlContent)
parser.Parse(nil, func(e *HtmlElement, isEmpty bool) {
if e.TagName == "link" {
link,_ := e.GetAttributeValue("href")
if(link != "") {
links = appends(links, link)
}
}
}, nil)
要记住的一些事项:
答案 5 :(得分:0)
我写了一个小包来做到这一点,它本质上是一个薄包装
golang.org/x/net/html
:
package main
import (
"github.com/89z/mech"
"net/http"
)
func main() {
r, err := http.Get("http://speedtest.lax.hivelocity.net")
if err != nil {
panic(err)
}
defer r.Body.Close()
doc, err := mech.Parse(r.Body)
if err != nil {
panic(err)
}
a := doc.ByTag("a")
for a.Scan() {
href := a.Attr("href")
println(href)
}
}