MAGAZINE
ルーターマガジン
Go言語
goqueryを使ったGo言語(Golang)スクレイピング入門
2019.10.16
こんにちは。学生アルバイトの栃沢颯太です。
今回はgoとスクレイピングのライブラリであるgoqueryを用いてスクレイピングする方法を紹介します。
インストール 使い方の紹介
まずは、goqueryのインストールをしていきます。
$ go get github.com/PuerkitoBio/goquerygoqueryは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()などたくさんのメソッドがあるので、
自分で試してみるといいかもしれません。
CONTACT
お問い合わせ・ご依頼はこちらから