Go PR

【Go言語(Golang)】CollyによるWebスクレイピング入門から実践まで

【Go言語(Golang)】collyによるWebスクレイピング入門から実践まで
記事内に商品プロモーションを含む場合があります

こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。

Goのスクレイピングフレームワーク Colly を活用したWebスクレイピングをソースコード付きで紹介します。

 Collyとは

Collyとは、高機能かつ高速なWebスクレイピングを実現できるGophers向けフレームワークです。詳細については公式サイトをご確認ください。

Webスクレイピング入門

環境構築やWebスクレイピング前に確認すべきことを紹介します。

Go開発環境構築

はじめにgolang:1.14の開発環境構築をします。色んな構築方法がありますが、Dockerを使う場合は、以下の記事を参考にして下さい。

【GopherJS入門】GoのソースコードからJavaScriptを生成
【GopherJS入門】GoのソースコードからJavaScriptを生成GoのソースコードからJavaScriptを生成できるGopherJSの基本的な使い方を紹介している記事です。複数のサンプルコードも公開しています。...

続いて、公式 README.md にある go.mod をダウンロードします。お好みですが、今回は一部変更した以下の go.mod を用意します。

以下のコマンドでCollyをインストールします。

go mod download

以上で環境構築完了です。

事前確認【robots.txt】

スクレイピング対象のサイトが、クローラを禁止しているか否かを robots.txt で確認します。本サイト:はやぶさの技術ノートの場合は、以下のURLから確認できます。

robots.txt の説明は割愛しますが、中身を理解できない内は、クローラやスクレイピングなどを活用したサイトの情報抽出は控えた方が良いかと。

CollyによるWebスクレイピング入門【Step1】

以降からGoのコードを書いていきます。スクレイピング対象のURLを指定して、HTMLから<title>要素のコンテンツを抽出します。

このソースコードを app.go という名前で保存し、以下のコマンドを実行すると、「訪問先のURL」と「タイトル」が表示されます。

$ go run app.go

Visiting URL: https://cpp-learning.com
Title: はやぶさの技術ノート|理系に役立つ情報

以上が Colly の基本的な使い方です。

html-css-cheat-sheet が最高なので、スクレイピング前に確認しておくと良い

スポンサーリンク

CollyによるWebスクレイピング実践

スクレイピングの主な目的は、情報収集だと思うので、サイトから抽出した情報をデータベースやファイルに保存して、後から確認できるようにします。本記事ではスクレイピング結果をJSONファイルに保存する方法を紹介します。

スクレピング結果をJSONファイルに保存【Step2】

app.go を改良して、以下の機能を追加します。

  • HTTP のレスポンスステータスコード確認
  • スクレイピング結果をJSONファイルに保存

完成したソースコードが以下です。

本コード実行後に生成される page.json が以下です。

はやぶさの技術ノートから最新投稿の情報を抽出【Step3】

本サイト:はやぶさの技術ノートでは、最新投稿の情報をサイドバーで公開中です(下図参照)。

「はやぶさの技術ノート」の最新投稿記事

上図にある最新記事5つの「タイトル」と「URL」を抽出するコードが以下です。

要素だけでなく、id・class・hrefも指定してスクレイピングできます。本コード実行後に生成される articles.json が以下です。

ページと最新投稿の情報を1つのJSONファイルに保存【Step4】

最後に、以下の情報を1つのJSONファイルに保存するコードを紹介します。

  • 【STEP2】で抽出した「ページ情報」
  • 【STEP3】で抽出した「最新記事」

完成したソースコードが以下です。

本コード実行後に生成される hayabusa-new-articles.json が以下です。

以上の【STEP1~4】で任意サイトから複数の情報を抽出して、1つのJSONファイルにまとめて保存する所までガイドできたと思います。

まとめ

Goのスクレイピングフレームワーク Colly を活用したWebスクレイピングをソースコード付きで紹介しました。

本記事のソースコードを改良すれば、任意サイトから複数の情報を抽出して、1つのJSONファイルにまとめて保存する所まで、できるようになると考えています。

はやぶさ
はやぶさ
本記事が、GoでWebスクレイピングしたい人の参考になれば嬉しいです

以下 オススメ書籍を紹介。

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python