LoginSignup
13
13

More than 5 years have passed since last update.

goqueryでHTMLの解析をする

Last updated at Posted at 2014-12-21

今までHTMLの解析はRuby使ってNokogiriでやることが多かったんだけど、インストールしようとすると大抵ビルド系のエラーが少なくとも一度は出て、ワーってなることまちがいなし。
というわけで、そういう苦しみの少なそうなgoでのHTML解析を探してみたらgoqueryが良さそうだったのでメモ。

まずはインストール。

$ go get github.com/PuerkitoBio/goquery

続いて、スクリプト。今回書いたのはローカルのファイルを読み込んで、特定のタグのリンク先をまとめて書き換えて標準出力するというもの。
GoDocはこちらなので細かいところはそっちを参照。

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/PuerkitoBio/goquery"
)

func ReplaceLinks() {

    // ファイルからドキュメントを作成
    f, e := os.Open("./index.html")
    if e != nil {
        log.Fatal(e)
    }
    defer f.Close()

    doc, e := goquery.NewDocumentFromReader(f)
    if e != nil {
        log.Fatal(e)
    }

    // DOMを解析してhrefの値を変更
    doc.Find(".list td a").Each(func(i int, s *goquery.Selection) {
        s.SetAttr("href", fmt.Sprintf("%03d.html", i+1))
    })

    // 変更したDOMの値をHTMLとして標準出力
    result, e := doc.Html()
    if e != nil {
        log.Fatal(e)
    }
    fmt.Print(result)
}

func main() {
    ReplaceLinks()
}

標準のgoのパーサーよりもこっちのが普段使いには良さそうかな。ちなみにMechanizeっぽいライブラリとしてはsurfが良さそうなので、必要になったら今度使って見る。

これで、Nokogiriのビルド地獄から開放されるといいなー。

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13