27

我正在学习谷歌的 Go 编程语言。有谁知道从 html 网页中提取所有 URL 的最佳实践?

来自 Java 世界,有一些库可以完成这项工作,例如jsouphtmlparser等。但是对于 go lang,我想还没有可用的类似库吗?

4

6 回答 6

25

如果您了解 jQuery,您会爱上GoQuery

老实说,它是我在 Go 中找到的最简单、最强大的 HTML 实用程序,它基于 go.net 存储库中的 html 包。(好吧,所以它比解析器更高级,因为它不公开原始 HTML 令牌等,但如果你想用 HTML 文档实际完成任何事情,这个包会有所帮助。)

于 2014-08-02T23:03:46.393 回答
21

Go 的 HTML 解析标准包仍在进行中,并且不是当前版本的一部分。您可能会尝试的第三方软件包是go-html-transform。它正在积极维护中。

于 2012-06-18T13:23:45.973 回答
17

虽然用于 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)。

于 2012-08-08T09:13:07.287 回答
6

我四处搜索,发现有一个名为Gokogiri的库,它听起来像 Ruby 的 Nogokiri。我认为这个项目也很活跃

于 2013-05-17T05:09:26.823 回答
0

我刚刚为 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)

要记住几件事:

  • 这些是相对链接,而不是完整的 URL
  • 不会收集动态生成的链接
  • 还有其他未收集的链接(META 标签、图像、iframe 等)。修改此代码以收集这些代码非常容易。
于 2015-09-13T04:21:05.913 回答
0

您也可以使用“Colly”文档),它通常用于网络报废

特征

  1. 清洁 API
  2. 快速(在单核上 > 1k 请求/秒)
  3. 管理每个域的请求延迟和最大并发
  4. 自动 cookie 和会话处理
  5. 同步/异步/并行抓取
  6. 分布式抓取
  7. 缓存
  8. 非 unicode 响应的自动编码
  9. Robots.txt 支持
  10. 谷歌应用引擎支持
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/")
}
 
于 2022-01-26T12:29:04.483 回答