2012-06-18 83 views

回答

20

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

+1

我无法在任何地方找到关于如何使用此库进行拼贴的示例,并且从文档中找不到它。任何人都可以给我一个例子吗? – kristaps

+0

是否计划在Go中原生包含这个包? – Kiril

+1

HTML包现在可用。请阅读此处的文档: https://godoc.org/golang.org/x/net/html – R4chi7

17

尽管用于HTML解析的Go包确实还在进行中,但它在go.net存储库中可用。

其来源是code.google.com/p/go.net/htmlgithub.com/golang/net它正在积极开发。

它在最近的go-nuts discussion中被提及。


注意,用GO 1.4(2014年12月),我在this answer提到的,现在包装是golang.org/x/net(见godoc)。

+2

Go html包已移至[go.net](https://code.google.com/p/ go/source/browse?repo = net#hg%2Fhtml)回购。 [Here](http://godoc.org/code.google.com/p/go.net/html)是文档。 – ctn

+0

@ctn感谢您的更新。不知道为什么你的编辑被拒绝:我已经在答案中恢复了它。 – VonC

+0

谢谢。他们说这会改变原来的意思,我最好留下评论。 – ctn

6

我搜索了一下,发现有一个名为Gokogiri的库,它听起来和Ruby的Nogokiri一样。我认为该项目也是active

23

如果您了解jQuery,您一定会喜欢GoQuery

说实话,它是我在Go中找到的最简单,最强大的HTML工具,它基于go.net存储库中的html包。 (好吧,所以它的级别高于只是一个解析器,因为它不暴露原始的HTML标记之类的,但如果你想真正得到任何与HTML文档完成后,这个软件包将帮助。)

+0

太棒了。非常感谢。 –

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) 

有几件事情要记住:

  • 这些都是相对的链接,而不是完整的网址
  • 不会收集动态生成的链接
  • 还有其他链接未被收集(META标签,图片,iframe,等等。)。修改此代码以收集这些代码非常简单。