皆さんご存じのとおり、Web上には情報が溢れています。溢れ過ぎて、情報収集に時間がかかり、一番やりたかった分析等の情報活用ができないこともあるでしょう。お手軽にWeb上から情報を収集できればいいのになあ、と思った皆さんは、今まさにスクレイピングを始める時です。
本書では、Web上のHTMLから必要な情報を取得すること、つまり、Webスクレイピングに着目しました。実装は、Googleが開発したオープンソースの静的型付プログラミング言語であるGo言語を使用しています。
本書は、Goで何も作ったことがない初心者が、実務でも使えるスクレイピングツールを作ることを通して、Go自体やライブラリの使い方を学ぶことを目的としています。
本書では、Go言語が枯れていない技術であり、スクレイピングツールがコンテキストによって実装方針が異なることから、筆者が調査や検討を経て「私ならこうする」という考えも交えながら書いています。次のようなものを設計、開発するときの考えのひとつとして、参考にしていただけると幸いです。
・Go言語を使用したツールの設計
・Go言語に限らずスクレイピングツールの設計
次の読者に最適な内容となっています。
・プログラミング経験はあるけど、Goははじめて
・Goを書いてみたい
・Goを業務に導入したい
・スクレイピングツールに興味がある
WebスクレイピングもGo言語もやったことがないという方でも理解できる内容になっていますので、ぜひ最後までお楽しみください。
本書では、次のようなページを想定してスクレイピングを学んでいきます。
・一覧ページと詳細画面のページが存在する
・日次でページの内容が更新される(今回使用するサンプルサイトは4日間分を用意)
・詳細画面には、画像とPDFのファイルが存在する
・一覧ページでページネーションが存在する
「本書でのWebサイトのスクレイピングの前提とサンプルサイトについて」の仕様を満たすよう、本書ではサンプルサイトのコードをgithub上1で公開しています。ぜひご利用ください。
サンプルサイトの起動方法については「1.2 スクレイピング用のサンプルサイトを用意する」に記載していますので、こちらをご覧ください。
また、本書の最終的なコードはgithub上2で公開しています。ぜひご参考にしてください。
本書では、説明のためにコメントアウトをあえて追加しています。どのようなことが書かれているか理解するために、補助として読んでください。ご自身がコードを書かれる場合は、もちろん不要な記述になります。
書籍としての見た目を重視するために、インデントは2スペースにしています。Go言語ではインデントのデフォルトはハードタブとなっています3ので、本書の記述をコピペする際はお気をつけください。
実行環境は、Mac/Windowsを想定して書いています。しかし、著者の実行環境がWindows11ですので、本書記述内容と実際の挙動で差異が発生する可能性があります。お手数ですが適宜読み替えてください。
本書は2023年2月時点での筆者環境を元に記述をしています。時を経ることでライブラリのバージョンやAPI、ディファクトスタンダードが変化しますがサポートは原則行いません。ご留意ください。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は必ずご自身の責任と判断によって行ってください。本書記載の情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
また、ウェブサイトによっては、無許可のスクレイピングを拒否しています(例:Twitter4)。そのようなサイトでスクレイピングを行うと、違反行為としてサービスから罰則を受けたり、違法な攻撃として法的に処罰されてしまう可能性もあります。本書はいかなる責任も負いかねますので、ご注意ください。
なお、本書ではローカル上で簡易のWebサーバを立て、そこに対してスクレイピングを実行します。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
短期間でレビューしてくださった@katakoto291さん、@Haradasn1さんありがとうございました。
次の手順で、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の文法を学びたければ、公式のチュートリアルサイトである「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/)を読むことをお勧めします。
最初にもお伝えしたとおり、スクレイピングを一般のサイトに実行すると違法になる場合があります。
本書では、ローカルの簡易的な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の場合)で実行できます。