今回は、Goを使って簡単なクローラーを作成してみたいと思います。
今回はDB登録までは作成しない予定ですが、機会があればDB登録は次回にしていきたいと思います。
前ソースコードはいかに格納されています。
https://github.com/twan65/go-crawler-exam
クローラーとは
クローラーとは、検索エンジンがサイトの内容を把握するためにインターネット上を巡回しているロボットのことを指します。クローラーが巡回したサイトがGoogleの検索結果に表示されるようになるため、SEO対策上極めて重要なものになります。
パッケージ構造

- src/google/crawler.go:実際クローラーのロジックが書いてあるパッケージです。
- app.go:mainパッケージです。
GOPATH(作業ディレクトリ)変更についてわからない方はこちらを参考してください。
cralwer.goの作成
getHtml()の作成

- 13行目:今回はGoogleの情報を取得するため、GoogleのURLをセットします。
- 14行目:httpパッケージを利用してGETリクエストを送ります。
- 21行目:getHtml ()が終わる時点でres.Bodyをクローズします。
- 23行目:Bodyからバイトスライスを取得します。
- ioutil.ReadAll関数は、引数の io.Reader から内容を全て読み込んでバイトスライスとして返します。
Crawler()の作成

- 40行目:文字列からHTMLドキュメントを読み込みます。この時、Parseのパラメータ型がio.Readerなので、strings.NewReaderを利用して変換してから渡します。
- 42行目:40行で変換したデータから全てのエレメントを取得します。

- 44、45行目:Findはスライス型を返しますので、ループしながらvalをテキストで変換して出力します。
crawler.goのソースコード

- 完成したソースコードです。
- ファイルを保存するとimportは自動的にimportされます。(VS CodeでGoパッケージをインストールした場合)
- 詳細のhtmlqueryについてはhttps://github.com/antchfx/htmlqueryを参考してください。
保存まで終わったらhtmlqueryをインストールします。
インストール方法はgo getコマンドでインストールできます。
app.goの作成

- 13行目:使用する最大CPU数をセットします。
- 14行目:sync.WaitGroupは全てのgoroutineが終了されるまで待機しなければならない時に使います。
- 15行目:WaitGroupに待機中のgoroutine数を追加します。
- 19〜25行目:クローラーを呼び出しています。
テスト

- go run app.goを利用してアプリを起動します。

- 取得して出力されることを確認できます。
終わりに
今回はGoを使って簡単なクローラーを作成してみました。文法とかわからなかったのもありましたけど、勉強しながら作成しました。
次回はDB登録をしていきたいと思っています。
