目次

はじめに
なぜWebスクレイピング
本書の目的
本書の対象読者
本書でのWebサイトのスクレイピングの前提とサンプルサイトについて
サンプルコードについて
注意事項
免責事項
表記関係について
謝辞
第1章 開発環境構築
1.1 Goのインストール
1.2 スクレイピング用のサンプルサイトを用意する
第2章 プロジェクト作成
2.1 プロジェクトの作成
2.2 Gitの導入
2.3 依存モジュール管理ツールの導入
第3章 一覧画面からの商品情報取得
3.1 一覧ページからデータを取得
第4章 データベース接続とデータの登録
4.1 データベースとの接続とテーブル作成
4.2 データベースへのデータの登録
4.3 エラーとエラーハンドリング
第5章 詳細画面からの商品情報取得
5.1 詳細画面からデータを取得
5.2 ファイルの取り扱い
第6章 さらに使いこなす
6.1 設定ファイルを環境ごとに制御する
6.2 ページネーションに対応する
第7章 応用編 BIツールによる分析
7.1 Metabaseを導入する
7.2 データベースに保存されたデータを確認する
7.3 時系列データを保存して、グラフを表示する

はじめに

なぜWebスクレイピング

 皆さんご存じのとおり、Web上には情報が溢れています。溢れ過ぎて、情報収集に時間がかかり、一番やりたかった分析等の情報活用ができないこともあるでしょう。お手軽にWeb上から情報を収集できればいいのになあ、と思った皆さんは、今まさにスクレイピングを始める時です。

 本書では、Web上のHTMLから必要な情報を取得すること、つまり、Webスクレイピングに着目しました。実装は、Googleが開発したオープンソースの静的型付プログラミング言語であるGo言語を使用しています。

本書の目的

 本書は、Goで何も作ったことがない初心者が、実務でも使えるスクレイピングツールを作ることを通して、Go自体やライブラリの使い方を学ぶことを目的としています。

 本書では、Go言語が枯れていない技術であり、スクレイピングツールがコンテキストによって実装方針が異なることから、筆者が調査や検討を経て「私ならこうする」という考えも交えながら書いています。次のようなものを設計、開発するときの考えのひとつとして、参考にしていただけると幸いです。

 ・Go言語を使用したツールの設計

 ・Go言語に限らずスクレイピングツールの設計

本書の対象読者

 次の読者に最適な内容となっています。

 ・プログラミング経験はあるけど、Goははじめて

 ・Goを書いてみたい

 ・Goを業務に導入したい

 ・スクレイピングツールに興味がある

 WebスクレイピングもGo言語もやったことがないという方でも理解できる内容になっていますので、ぜひ最後までお楽しみください。

本書でのWebサイトのスクレイピングの前提とサンプルサイトについて

 本書では、次のようなページを想定してスクレイピングを学んでいきます。

 ・一覧ページと詳細画面のページが存在する

 ・日次でページの内容が更新される(今回使用するサンプルサイトは4日間分を用意)

 ・詳細画面には、画像とPDFのファイルが存在する

 ・一覧ページでページネーションが存在する

サンプルコードについて

 「本書でのWebサイトのスクレイピングの前提とサンプルサイトについて」の仕様を満たすよう、本書ではサンプルサイトのコードをgithub上1で公開しています。ぜひご利用ください。

 サンプルサイトの起動方法については「1.2 スクレイピング用のサンプルサイトを用意する」に記載していますので、こちらをご覧ください。

 また、本書の最終的なコードはgithub上2で公開しています。ぜひご参考にしてください。

注意事項

本書内のサンプルコードの記載について

 本書では、説明のためにコメントアウトをあえて追加しています。どのようなことが書かれているか理解するために、補助として読んでください。ご自身がコードを書かれる場合は、もちろん不要な記述になります。

電子版でのサンプルコードについて

 書籍としての見た目を重視するために、インデントは2スペースにしています。Go言語ではインデントのデフォルトはハードタブとなっています3ので、本書の記述をコピペする際はお気をつけください。

OSについて

 実行環境は、Mac/Windowsを想定して書いています。しかし、著者の実行環境がWindows11ですので、本書記述内容と実際の挙動で差異が発生する可能性があります。お手数ですが適宜読み替えてください。

各種ライブラリのバージョンについて

 本書は2023年2月時点での筆者環境を元に記述をしています。時を経ることでライブラリのバージョンやAPI、ディファクトスタンダードが変化しますがサポートは原則行いません。ご留意ください。

免責事項

 本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は必ずご自身の責任と判断によって行ってください。本書記載の情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。

 また、ウェブサイトによっては、無許可のスクレイピングを拒否しています(例:Twitter4)。そのようなサイトでスクレイピングを行うと、違反行為としてサービスから罰則を受けたり、違法な攻撃として法的に処罰されてしまう可能性もあります。本書はいかなる責任も負いかねますので、ご注意ください。

 なお、本書ではローカル上で簡易のWebサーバを立て、そこに対してスクレイピングを実行します。

表記関係について

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

謝辞

 短期間でレビューしてくださった@katakoto291さん、@Haradasn1さんありがとうございました。

1. https://github.com/ex-n-soldiers/sample-site

2. https://github.com/ex-n-soldiers/go-scraping

3. https://go.dev/doc/effective_go#formatting

4. https://twitter.com/ja/tos

第1章 開発環境構築

1.1 Goのインストール

 次の手順で、Goをインストールしてください。

 1.Goのダウンロード: 公式サイト(https://go.dev/doc/install)よりご利用のOSに合わせて、インストーラーをダウンロードしてください。

 2.Goのインストール: ダウンロードしたインストーラーを開き、指示に従いインストールしてください。

 3.Goの動作確認: ターミナルを使用して、Goのインストールが正常に完了していることを確認します。コマンドプロンプトでgo versionコマンドを実行し、バージョンが表示されればインストール完了です。本書執筆時点ではGoの最新バージョンが1.20.1なので、go1.20.1が表示されています。

> go version

go version go1.20.1

Goの基本文法

 Goの文法を学びたければ、公式のチュートリアルサイトである「A Tour of Go」(https://go.dev/tour)が最適です。日本語に翻訳されたサイト(https://go-tour-jp.appspot.com/)もあり、ブラウザ上でもコードが実行できます。本書では紙面の都合上、文法の説明は省いていますので、ひととおり「A Tour of Go」を読む、または基本的文法について本書でわからない文法があるときに適宜「A Tour of Go」や公式ドキュメント(https://go.dev/doc/)を読むことをお勧めします。

1.2 スクレイピング用のサンプルサイトを用意する

 最初にもお伝えしたとおり、スクレイピングを一般のサイトに実行すると違法になる場合があります。

 本書では、ローカルの簡易的なWebサーバに対してスクレイピングができるように、サンプルサイトを準備しました。gitをはじめてご利用の方は、gitをインストール後、次のコマンドでリポジトリのクローンをします。

> git clone https://github.com/ex-n-soldiers/sample-site

 次のコマンドを実行するだけで、ローカル上で簡易的なWebサーバが起動されます。実行後、「http://localhost:5000/」にアクセスしてみてください。サンプルサイトが表示されます。

> cd sample-site

> go run application.go

 さらに3日分のページを表示する場合は、-dオプションに値を指定することで表示ができます。

> go run application.go -d 2

> go run application.go -d 3

> go run application.go -d 4

 この後のスクレイピング時に、適宜使い分けてご利用ください。

ブラウザのキャッシュクリア

 ブラウザにはキャッシュ機能があり、一度アクセスしたページの情報を保存して、2回目以降のアクセスで再利用しています。キャッシュ機能により、-dオプションを変えてサンプルサイトの表示が変わるはずなのに、表示内容が変わっていないという事態が生じることがあります。その場合は、キャッシュを削除するか、ページの強制再読み込みをしてください。ページの再読み込みは command + shift + R (Macの場合) / ctrl + F5 (Windowsの場合)で実行できます。

試し読みはここまでです。
この続きは、製品版でお楽しみください。