Go言語でスクレイピングをしていきます。
サードパーティのGoqueryライブラリは、
jQueryライクに使えるので、
大変分かりやすくて、使いやすいです。
パッケージのインポート
import "github.com/PuerkitoBio/goquery" |
ここで一般的な使い方を紹介します。
スクレイピングの対象は、
wiki(ウィキペディア)にします。

見出しなどの情報を抽出してみましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
package main import ( "fmt" "log" "net/http" "github.com/PuerkitoBio/goquery" ) const url = "https://ja.wikipedia.org/wiki/SCADA" func main() { res, err := http.Get(url) if err != nil { log.Println(err) } defer res.Body.Close() /* 見出しの取得 */ doc, _ := goquery.NewDocumentFromReader(res.Body) doc.Find(".mw-headline").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text()) }) fmt.Println("\n--------------------------------------------------") /* 目次の取得 */ doc.Find(".tocnumber").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text(), " ", s.Next().Text()) }) } |
基本的には、Findメソッドで探索していきます。
jQeuryと同じなので、
"タグ名" / ".クラス名" / "#id" で
目的のノードなどにアクセス出来ます。
実行結果はこのようになります。

例えばwikiの目次を取得する場合は、
以下のようになります。
Wikipediaの目次をスクレイピングする!
開発者ツールで見ると、
目次はこのように構成されています。
目次項目は、<li>タグの中にあり、
通し番号と項目名はそれぞれ、
<span>タグで囲まれています。

通し番号のspanに適用されている
"tocnumber"クラスは、
目次でしか使われていないので、
これを目印に探索します。
Findでtocnumber指定したら、
<span class="tocnumber">1<span>
が最初にヒットします。
Eachでtocnumberクラスが適用されている
全てのspanタグにアクセス出来ます。
s.Text()でタグで囲まれたテキストを取得出来ます。
つまり目次番号が取得できます。
tocnumberを指定しただけでは、
目次番号しか取得出来ません。
目次項目も目次番号の次に、
spanタグ内にあるので、
s.Next()で次の要素(ノード)を取得出来ます。
そこに.Text()を加えれば、
目次項目が手に入るというわけです。
最後まで読んでいただきありがとうございました。