2012-10-14 68 views
5

我有一個表,我想解析的HTML。類似於以下內容 http://sprunge.us/IJUC 但是,我不確定解析出這些信息的好方法。我見過一些html解析器,但是這些解析器似乎都要求所有東西都有一個特殊的標籤供你解析,比如抓取信息;然而,我的大部分信息都在<td></td>去解析HTML表

有沒有人有解析這些信息的建議?

回答

14

無恥插頭:我goquery庫。這是帶到Go的jQuery語法(需要Go的experimental html package,請參閱庫的README中的說明)。

所以,你可以做這樣的事情(假設你的HTML文檔加載文檔,一個*goquery.Document):

doc.Find("td").Each(func (i int, s *goquery.Selection) { 
    fmt.Printf("Content of cell %d: %s\n", i, s.Text()) 
}) 

編輯:在本例中更改doc.Root.Finddoc.Find因爲goquery文檔現在是一個選擇太(新的V0.2/master分支)

+0

不錯的包,但林有使用它的問題。我進口它,但編譯器告訴我,Document和NewDocument未定義? – Eno

+0

你可以用GitHub上的代碼摘錄以及你安裝它的步驟來解決問題嗎?我會看看。 – mna

+0

我是新來的,所以很可能我做錯了什麼。我在Mac和Ive使用Homebrew安裝Go(1.0.3)。運行「go get github.com/PuerkitoBio/goquery」似乎已經在/usr/local//Cellar/go/1.0.3/src/pkg/github.com/PuerkitoBio/goquery上安裝了該軟件包。 – Eno

0

如果精心形成你的HTML,您可以使用內置的XML解析器:

http://golang.org/pkg/encoding/xml/

+0

我看到的一切使用XML包就假設你有一個像標籤名稱。我如何閱讀我所有的表格行? –

+5

@sorcix格式良好的HTML不是XML。你在混淆HTML和XHTML嗎? –

2

您還可能有興趣在圍棋的實驗性HTML解析器: https://code.google.com/p/go.net/html

包defini根據godoc重刑:

包裝HTML實現了兼容HTML5的標記生成器和分析器

我沒有用它自己,但它似乎很直接:

解析通過使用io.Reader調用Parse來完成,該解析器將解析樹(文檔元素)的 根作爲* Node返回。主叫方負責確保Reader提供UTF-8編碼的HTML編碼。

go get code.google.com/p/go.net/html 

import "code.google.com/p/go.net/html" 

doc, err := html.Parse(r) 

這不是任何當前版本的一部分,但如果你從安裝或使用golang尖端的Ubuntu容易回購可以使用。

編輯:你也可以使用這裏的實驗圍棋包以下鏡子:https://github.com/kless/go-exp

go get github.com/kless/go-exp/html 

import (
    "github.com/kless/go-exp/html" 
) 
+0

有沒有任何跡象表明這個軟件包什麼時候會升級到標準庫? – djhworld

+0

實驗性HTML解析器已移至https://code.google.com/p/go/source/browse?repo=net。至於什麼時候能夠推廣,維護者在12月8日表示,它通過Webkit測試套件非常接近,但在API被凍結之前不會被推廣,而且他還沒有準備好。 – spiffytech