目次

前書き

情報を取得する意味
諸注意
免責事項

第1章 環境構築

1.1 macOSでのPython
1.2 Windows 10でのPython
1.3 環境を作る
1.4 Docker

第2章 最初のスクレイピング

2.1 Scrapyの構成について
2.2 プロジェクトの作成
2.3 アイテム設定
2.4 Scrapyの設定
2.5 Spider作成
2.6 クローラーの実行
2.7 ソースコードについて

第3章 POSTメソッドがあるサイトでスクレイピング

3.1 プロジェクトの作成
3.2 アイテム設定
3.3 Spider作成
3.4 クローラーの実行
3.5 ソースコードについて

第4章 データベースを使用する

4.1 ORMの導入
4.2 データベースの準備
4.3 プロジェクトの作成
4.4 アイテム設定
4.5 Pipelineの設定
4.6 データベースの設定
4.7 テーブル情報の作成
4.8 Pipeline作成
4.9 Spider作成
4.10 クローラーの実行
4.11 データベースの確認
4.12 ソースコードについて

第5章 動的画面のスクレイピング

5.1 JavaScriptレンダリングの導入
5.2 Splashの準備
5.3 プロジェクトの作成
5.4 アイテム設定
5.5 JavaScriptレンダリング用の設定
5.6 Spider作成
5.7 クローラーの実行
5.8 ソースコードについて

第6章 Lazy loading画面のスクレイピング

6.1 前準備
6.2 プロジェクトの作成
6.3 アイテム設定
6.4 Spider作成
6.5 クローラーの実行
6.6 ソースコードについて

第7章 Dropboxと連携する

7.1 Dropboxとの連携準備
7.2 dropboxモジュールの導入
7.3 プロジェクトの作成
7.4 アイテム設定
7.5 Scrapyの設定
7.6 Pipeline作成
7.7 Spider作成
7.8 クローラーの実行
7.9 Dropboxと連携するメリット
7.10 ソースコードについて

第8章 Cloudサービスを使ってスクレイピング

8.1 プロジェクトの作成
8.2 アイテム設定
8.3 Scrapyの設定
8.4 Spider作成
8.5 クローラーの実行
8.6 Cloudサービスでの実行
8.7 ソースコードについて

第9章 Cloudサービスで定期的実行をする

9.1 ORMの導入
9.2 データベースの準備
9.3 プロジェクトの作成
9.4 アイテム設定
9.5 Pipelineの設定
9.6 データベースの設定
9.7 テーブル情報の作成
9.8 Pipeline作成
9.9 Spider作成
9.10 クローラーの実行
9.11 データベースの確認
9.12 Herokuにdeploy
9.13 定期実行
9.14 ソースコードについて

あとがき

謝辞

前書き

 この書籍ではWebスクレイピングを、PythonとScrapyフレームワークを利用して行うことをソースコードとともに解説します。

 スクレイピング(Scraping)とは「こする」「削る」「剥離」などの意味があります。そこから転じて、Webスクレイピングは別の目的や用途でデータを抽出したりすることになります。

 Webサイトには多くの情報があり、ブラウザの利用だけでも取得できますが、Webサイトを閲覧するという行為が能動的であり、手間と時間を使うことになります。

情報を取得する意味

 遠い昔、パソコン通信時代やインターネット初期のころはオートパイロットやRSSリーダーなどのツールがあり、それを利用する個人向けのサービスがありました。これらのツールや個人向けサイトを使用することで、必要な情報を必要なときに取得できました。インターネット初期のころ、ネットワークへの接続という手順を踏む時代には重宝されたツールでした。

 それからインターネットを利用するのが簡単な時代になり、Googleなどの検索サイトですぐに検索できるようになり、スマートフォンを使用してすぐにサイトを見ることができるようになりました。そして、次第に個人向けのサービスが廃れていき消えていきました。

 このようなテクノロジーはロストテクノロジーになってしまったのでしょうか?

 個人向けサービスとしては、レイトマジョリティ層を過ぎてラガード層にしか使用されないようになっているので、採算が取れないのであれば消えていく状況であります。Google検索一強の時代になり気付きにくいのですが、そもそも検索サイトなどはスクレイピングを駆使しているので、見えないところでは大活躍しております。

 とくに2018年ぐらいから急増したGitHubなどの情報を元にしたスコアリング転職マッチングサービスなどは、API連携だけで取得できない情報はスクレイピングを使って取得しているようです。

 スクレイピングは今も使われているテクノロジーなのです。

 ラガード層になってしまったスクレイピングを元としたツールが、個人需要として今の時代に復活することはないですが、個人のデータの活用としては需要があると考えますので、個人でできる範囲ならばWebスクレイピングで色々な情報を取得して整理することが可能です。

 この書籍から、自分なりのWebスクレイピングの活用方法を考えてはいかがでしょうか?

諸注意

 Webスクレイピングを別の目的としたのは、Webサイトは通常の方法で閲覧することが本来の目的であり、プログラムによる閲覧は想定された利用方法ではありません。そのため、抽出したデータを個人の目的以外で利用するのは推奨しません。

 そのためWebサイトには、Webスクレイピングのようなロボットを制御するための記載があります。metaタグとrobots.txtが該当し、こちらの制御されるルールに従うことを強く推奨します。

metaタグに関する注意

 Webサイトを構成するHTML文章には、制御を目的としたmetaタグがあります。metaタグのname属性にロボット検索に関する記述されています。Webスクレイピングを行う前には必ず確認しておきましょう。今見ているURLの前にview-source:を付けてWebサイトを見るだけで、HTML文章を見ることができます。

 次のname属性にrobotsの指定されているmetaタグがあり、contentの指定でindex,followがあるWebサイトでWebスクレイピングを行うようにしてください。また、name属性にrobotsの指定されているmetaタグが存在しないときは、下の指定がされているとみなして良いのでWebスクレイピングしても問題ないです。

リスト1: ロボット検索を許容しているmetaタグ

<meta name="robots" content="index,follow"/>

 次のrobotsの指定されているmetaタグがひとつでも存在するWebサイトには注意が必要です!
Webサイトの管理者・所有者で禁止しているため、Webスクレイピングをしようとしてはいけません。

リスト2: ロボット検索を拒否しているmetaタグ

<meta name="robots" content="none">
<meta name="robots" content="noindex">
<meta name="robots" content="index,nofollow">
<meta name="robots" content="noarchive">
<meta name="robots" content="noimageindex">
<meta name="robots" content="noindex,nofollow,noimageindex,noarchive">

使われないnoodpとnoydir

 ときどき、contentにnoodpとnoydirを見かけることがあります。これはともにディレクトリ登録サービスで検索されるときの表示され方を指示するものでしたが、今はディレクトリ検索サービスが自体が存在していないので意味のない記述になります。

 参考まで説明すると、noodpは、GoogleやBingでの検索結果がディレクトリ登録サービスであるDMOZの情報に書き換えられることを拒否する指定です。

 noydirは、Yahoo!での検索結果がヤフーカテゴリーの情報に書き換えられることを拒否する指定です。

robots.txtに関する注意

 robots.txtはWebサイトにあるテキストファイルで、スクレイピングに対して指示を出すファイルです。Webサイトでは置いてあることが多いのでスクレイピングする前に確認しておきましょう。

 次のような記述はWebスクレイピングを拒否する設定です。
Webサイトの管理者・所有者で禁止しているため、Webスクレイピングをしようとしてはいけません。

リスト3: Disallowの指定

User-agent: *
Disallow: /

 なお、Scrapyはrobots.txtを識別して動くので、実際に動かしてもForbiddenとしてスクレイピングしません。

図1: Forbidden

過剰なアクセスに関する注意

 Webスクレイピングはリクエストの仕方によっては短時間に大量のアクセスをしてしまうことがあり、Webサイトに対して過剰なアクセスで迷惑をかけることになります。開発時はスクレイピングのキャッシュを有効(「2.4 Scrapyの設定」にて記載)にしてできるだけ過剰なアクセスをしないように心がけてください。

免責事項

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

 この書籍は2021年8月31日時点でのサイト情報をスクレイピングしております。それ以降にサイト更新が行われたとき正常にWebスクレイピングできなくなることがあります。

第1章 環境構築

 今回使用するScrapyフレームワークは、Pythonで動作します。そのため、Pythonを使用できるようにします。著者の環境はバージョン3.9.1を使用しますが、3系であれば問題ないです。

 2系は日本語処理に癖がある、将来的にサポート外になるなどの問題があることから、筆者としてはオススメしておりません。

1.1 macOSでのPython

 macOSではPythonがインストールされていますが、macOS 11 Big Surで入っているPythonのバージョンは2.7.16で、冒頭でも書いたとおり2系になるので3系に変更します。

 https://www.python.org/ で配布しているインストーラーでも、pyenvやPipenvなどの管理ツールなど、またはHomebrewに慣れている方はHomebrewを使用してください。Anaconda系が入っている方は変更してくださいとはいいませんが、余計なツールを入れてしまうなどがあるので、新規に入れるのはオススメしておりません。

 上のインストールツールを使用してPythonの3系をインストールします。

 またmacOSはデフォルトで入っているGitのバージョンが低いので、アップデートしておくのもオススメします。

1.2 Windows 10でのPython

 Windows 10ではPythonが入っておりません。

 macOSと同じくhttps://www.python.org/ で配布しているインストーラーでいいです。もしWSL2(Windows Subsystem for Linux 2)を利用しているなら、その環境にPythonの3系は自動的に入ります。それとmacOSと同じようにAnaconda系はオススメしません。

 上のインストールツールを使用して、Pythonの3系をインストールします。

 またWindows 10とWSL2はGitが入っていないので、Gitも合わせてインストールします。

1.3 環境を作る

 ソースコードを置くところを作成してから仮想環境の構築を行います。

リスト1.1: 仮想環境構築

mkdir -p scrapy-source
python -m venv .venv

 仮想環境の作成ができたら、環境を切り替えます。

 macOSでは、下の方法で切り替えます。

リスト1.2: macOSでの環境切り替え

source .venv/bin/activate

 コマンドプロンプトでは、下の方法で切り替えます。

リスト1.3: コマンドプロンプトでの環境切り替え

.venv\Scripts\activate.bat

 PowerShellでは、下の方法で切り替えます。

 ※実行許可がないときは、実行許可を与えてください。

リスト1.4: PowerShellでの環境切り替え

.venv\Scripts\activate.ps1

 WSL2では、下の方法で切り替えます。

リスト1.5: WSL2での環境切り替え

. .venv/bin/activate

 仮想環境を構築したら、Scrapyフレームワークをインストールします。

リスト1.6: Scrapyフレームワークのインストール

pip install scrapy

 これで環境ができました。あとは好きなエディターで読み込ませれば完了です。

 なお、この書籍で使用した筆者作成のソースコードはGitHubに公開しています。

 https://github.com/hideaki-kawahara/scrapy-source.git

1.4 Docker

 この書籍ではDockerを使うことを前提で記載しています。Dockerの知識は必須ではないですが、Dockerのインストールと起動する知識があるといいです。

 次のようにコマンドラインを叩いて、dockerとdocker-composeのバージョンが出るようにDockerを準備してください。

リスト1.7: Dockerのバージョン確認について

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