Golang – 簡単なWebクローラー

今回は、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行で変換したデータから全てのエレメントを取得します。
htmlquery.Find
  • 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登録をしていきたいと思っています。

参考

コメントを残す