2012-10-14 7 views
5

私は解析したいHTMLテーブルを持っています。次のようなもの http://sprunge.us/IJUC しかし、私は情報を解析する良い方法は不明です。私はいくつかのhtmlパーサを見たことがありますが、それらはすべて、あなたがそれを解析するための特別なタグを持っている必要があるようです。しかし、私の情報の大部分は、<td></td>GoパースHTMLテーブル

この情報を解析するための提案はありますか?

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

答えて

14

恥知らずなプラグイン::マイgoqueryライブラリあなたのHTMLがよく形成されている場合に

+0

すてきなパッケージですが、使用に問題があります。私はそれをインポートしますが、コンパイラはDocumentとNewDocumentが定義されていないことを教えていますか? – Eno

+0

コードから抜粋してGitHubで問題を開くことができますか?私はそれを見てみましょう。 – mna

+0

Im新しいことに行くので、おそらく間違ったことをしています。 MacにはIm、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

は、あなたは組み込みのXMLパーサーを使用することができます。これは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.Findに変更doc.Root.Find goquery文書があまりにも今の選択であるために(v0.2デベロッパー/ masterブランチの新機能)

+0

すべてはあなたがまたはなどのタグ名を前提としています。どのようにしてテーブル行全体を読み込むだけですか? –

+5

@sorcix整形式のHTMLはXMLではありません。あなたはHTMLとXHTMLを混同していますか? –

2

あなたはまた、ゴーの実験的なHTMLパーサに興味がある可能性があり: https://code.google.com/p/go.net/html

パッケージdefini godocに従ってン:

パッケージのHTMLは

HTML5準拠のトークナイザとパーサーを実装し、私はそれを自分自身を使用していないが、それはかなりストレートなようだ:

構文解析は、io.Readerを使用してParseを呼び出すことによって行われます。io.Readerは、解析ツリーのルート(ノード)として ルートを返します。 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のaptのリポジトリを使用し場合に使用することができます。

EDIT:あなたがここにも実験的な囲碁パッケージの次ミラーを使用することができます:XMLパッケージを使用してについての私が見https://github.com/kless/go-exp

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

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

このパッケージをいつ標準libに昇格させる予定ですか? – djhworld

+0

実験的なHTMLパーサーがhttps://code.google.com/p/go/source/browse?repo=netに移動しました。プロモートされる時期は、8月12日にメンテナーがWebkitテストスイートを通過することに非常に近いと述べたが、APIがフリーズするまでプロモートされず、その準備ができていなかった。 – spiffytech