MAGAZINE

ルーターマガジン

Go言語

goqueryを使ったGo言語(Golang)スクレイピング入門

2019.10.16
Pocket

こんにちは。学生アルバイトの栃沢颯太です。

今回はgoとスクレイピングのライブラリであるgoqueryを用いてスクレイピングする方法を紹介します。

インストール 使い方の紹介

まずは、goqueryのインストールをしていきます。

$ go get github.com/PuerkitoBio/goquery
goqueryはjqueryのように扱うことができ、rubyのnokogiriの役割をしてくれます。
import{
 "github.com/PuerkitoBio/goquery"
}

上記のようにgoqueryをimportすれば、使うことができます。

goquery.NewDocument("URL")とすることで、

データを取得したいと思ったサイトのドキュメントを取得することができます。

何かしらの原因で取得することができなかったときは、エラー情報がerrに格納されます。

そのため、エラーが起きていないか、if文で確認してあげます。

errがnilでない場合は”htmlの取得に失敗しました”と返すようにしています。

panicはプログラムを強制的に終了するメソッドです。

例)

doc, err := goquery.NewDocument("https://rooter.jp/blog/")
if err != nil {
 panic("htmlの取得に失敗しました")
}

docにはサイトのドキュメント情報が入っており、Find(CSSセレクタ)とすれば、

特定の情報をとってくることができます。

title := doc.Find("h3.article-title")
最後にeachして、出力してあげます。 iにはindexが入っており、sに取得した情報が入ります。
title.Each(func(i int, s *goquery.Selection){
 fmt.Print(s.Text())
})

実際のコード

package main
import (
 "fmt"
 "github.com/PuerkitoBio/goquery"
)

func main() {
 doc, err := goquery.NewDocument("https://rooter.jp/blog/") 
 if err != nil {
  panic("htmlの取得に失敗しました") 
 } 
 title := doc.Find("h3.article-title") 
 title.Each(func(i int, s *goquery.Selection){ 
  fmt.Print(s.Text()) 
 }) 
}

<出力結果>

[入門 編] RubyからGoogleスプレッドシートを操作する簡単チュートリアル
Web系 未経験の機械系男子学生がルーターでのアルバイト半年間で学んだこと
元お茶屋さんの勤務5ヶ月目アルバイトが感じる、ルーターでのアルバイトの魅力について
Nokogiri拡張Rubygem Tonkachiのご紹介
SIer出身者がルーターでの研修を終えて
FactoryBotでRailsのテスト用レコードを楽に作成する
AWS Lambda上のヘッドレスChromeとPuppeteerでサーバーレススクレイピング
Nokogiriで容量が大きいxmlをparseしてメモリ溢れ(プロセスkilled)するときのNokogiri::XML::Reader
Rubyの多次元hashから目的の値がある位置を検索する方法
隣接都道府県APIをテスト公開します
弊社のブログ記事のタイトルを出力してみました。

最後に

今回はとても簡単なことしかしていないので、goqeryについては詳しく書いていないのですが、

goqueryにはNext(),  Children(),  Parent()などたくさんのメソッドがあるので、

自分で試してみるといいかもしれません。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから