我正在学习谷歌的 Go 编程语言。有谁知道从 html 网页中提取所有 URL 的最佳实践?
来自 Java 世界,有一些库可以完成这项工作,例如jsoup、htmlparser等。但是对于 go lang,我想还没有可用的类似库吗?
我正在学习谷歌的 Go 编程语言。有谁知道从 html 网页中提取所有 URL 的最佳实践?
来自 Java 世界,有一些库可以完成这项工作,例如jsoup、htmlparser等。但是对于 go lang,我想还没有可用的类似库吗?
如果您了解 jQuery,您会爱上GoQuery。
老实说,它是我在 Go 中找到的最简单、最强大的 HTML 实用程序,它基于 go.net 存储库中的 html 包。(好吧,所以它比解析器更高级,因为它不公开原始 HTML 令牌等,但如果你想用 HTML 文档实际完成任何事情,这个包会有所帮助。)
Go 的 HTML 解析标准包仍在进行中,并且不是当前版本的一部分。您可能会尝试的第三方软件包是go-html-transform。它正在积极维护中。
虽然用于 HTML 解析的 Go 包确实仍在开发中,但它可以在go.net存储库中找到。
它的来源在code.google.com/p/go.net/html
github.com/golang/net
并且正在积极开发中。
在最近的疯狂讨论中提到了这一点。
请注意,正如我在这个答案中提到的那样,使用 Go 1.4(2014 年 12 月),包现在是golang.org/x/net
(请参阅godoc)。
我刚刚为 Go 发布了一个基于事件的开源 HTML 5.0 兼容解析包。你可以在这里找到
这是从页面(来自 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)
要记住几件事:
特征
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/")
}