【发布时间】:2012-06-20 07:26:21
【问题描述】:
我正在学习google's Go programming language。有谁知道从 html 网页中提取所有 URL 的最佳做法?
来自 Java 世界,有一些库可以完成这项工作,例如 jsoup 、htmlparser 等。但是对于 go lang,我想还没有可用的类似库吗?
【问题讨论】:
标签: html-parsing go
我正在学习google's Go programming language。有谁知道从 html 网页中提取所有 URL 的最佳做法?
来自 Java 世界,有一些库可以完成这项工作,例如 jsoup 、htmlparser 等。但是对于 go lang,我想还没有可用的类似库吗?
【问题讨论】:
标签: html-parsing go
你也可以使用"Colly" (documentations), 它通常用于网络报废
特点
import (
"fmt"
"github.com/gocolly/colly"
)
func main() {
c := colly.NewCollector()
// Find and visit all links
c.OnHTML("a", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL)
})
c.Visit("http://go-colly.org/")
}
【讨论】:
我刚刚为 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)
需要注意的几点:
【讨论】:
虽然用于 HTML 解析的 Go 包确实仍在开发中,但它可以在 go.net 存储库中找到。
它的来源是 code.google.com/p/go.net/htmlgithub.com/golang/net,它正在积极开发中。
最近的go-nuts discussion中提到了。
请注意,正如我在 this answer 中提到的那样,使用 Go 1.4(2014 年 12 月),包现在是 golang.org/x/net(请参阅 godoc)。
如果你了解 jQuery,你会喜欢GoQuery。
老实说,它是我在 Go 中找到的最简单、最强大的 HTML 实用程序,它基于 go.net 存储库中的 html 包。 (好吧,所以它比解析器更高级,因为它不暴露原始 HTML 令牌等,但如果你想用 HTML 文档实际完成任何事情,这个包会有所帮助。)
【讨论】:
Go 的 HTML 解析标准包仍在开发中,不是当前版本的一部分。您可能会尝试的第三方软件包是go-html-transform。它正在积极维护中。
【讨论】: