2012-06-18 82 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,等等。)。修改此代碼以收集這些代碼非常簡單。