前書き
第1章 環境構築
第2章 最初のスクレイピング
第3章 POSTメソッドがあるサイトでスクレイピング
第4章 データベースを使用する
第5章 動的画面のスクレイピング
第6章 Lazy loading画面のスクレイピング
第7章 Dropboxと連携する
第8章 Cloudサービスを使ってスクレイピング
第9章 Cloudサービスで定期的実行をする
あとがき
この書籍ではWebスクレイピングを、PythonとScrapyフレームワークを利用して行うことをソースコードとともに解説します。
スクレイピング(Scraping)とは「こする」「削る」「剥離」などの意味があります。そこから転じて、Webスクレイピングは別の目的や用途でデータを抽出したりすることになります。
Webサイトには多くの情報があり、ブラウザの利用だけでも取得できますが、Webサイトを閲覧するという行為が能動的であり、手間と時間を使うことになります。
遠い昔、パソコン通信時代やインターネット初期のころはオートパイロットやRSSリーダーなどのツールがあり、それを利用する個人向けのサービスがありました。これらのツールや個人向けサイトを使用することで、必要な情報を必要なときに取得できました。インターネット初期のころ、ネットワークへの接続という手順を踏む時代には重宝されたツールでした。
それからインターネットを利用するのが簡単な時代になり、Googleなどの検索サイトですぐに検索できるようになり、スマートフォンを使用してすぐにサイトを見ることができるようになりました。そして、次第に個人向けのサービスが廃れていき消えていきました。
このようなテクノロジーはロストテクノロジーになってしまったのでしょうか?
個人向けサービスとしては、レイトマジョリティ層を過ぎてラガード層にしか使用されないようになっているので、採算が取れないのであれば消えていく状況であります。Google検索一強の時代になり気付きにくいのですが、そもそも検索サイトなどはスクレイピングを駆使しているので、見えないところでは大活躍しております。
とくに2018年ぐらいから急増したGitHubなどの情報を元にしたスコアリング転職マッチングサービスなどは、API連携だけで取得できない情報はスクレイピングを使って取得しているようです。
スクレイピングは今も使われているテクノロジーなのです。
ラガード層になってしまったスクレイピングを元としたツールが、個人需要として今の時代に復活することはないですが、個人のデータの活用としては需要があると考えますので、個人でできる範囲ならばWebスクレイピングで色々な情報を取得して整理することが可能です。
この書籍から、自分なりのWebスクレイピングの活用方法を考えてはいかがでしょうか?
Webスクレイピングを別の目的としたのは、Webサイトは通常の方法で閲覧することが本来の目的であり、プログラムによる閲覧は想定された利用方法ではありません。そのため、抽出したデータを個人の目的以外で利用するのは推奨しません。
そのためWebサイトには、Webスクレイピングのようなロボットを制御するための記載があります。metaタグとrobots.txtが該当し、こちらの制御されるルールに従うことを強く推奨します。
Webサイトを構成するHTML文章には、制御を目的としたmetaタグがあります。metaタグのname属性にロボット検索に関する記述されています。Webスクレイピングを行う前には必ず確認しておきましょう。今見ているURLの前にview-source:を付けてWebサイトを見るだけで、HTML文章を見ることができます。
次のname属性にrobotsの指定されているmetaタグがあり、contentの指定でindex,followがあるWebサイトでWebスクレイピングを行うようにしてください。また、name属性にrobotsの指定されているmetaタグが存在しないときは、下の指定がされているとみなして良いのでWebスクレイピングしても問題ないです。
<meta name="robots" content="index,follow"/>
次のrobotsの指定されているmetaタグがひとつでも存在するWebサイトには注意が必要です!
Webサイトの管理者・所有者で禁止しているため、Webスクレイピングをしようとしてはいけません。
<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">
ときどき、contentにnoodpとnoydirを見かけることがあります。これはともにディレクトリ登録サービスで検索されるときの表示され方を指示するものでしたが、今はディレクトリ検索サービスが自体が存在していないので意味のない記述になります。
参考まで説明すると、noodpは、GoogleやBingでの検索結果がディレクトリ登録サービスであるDMOZの情報に書き換えられることを拒否する指定です。
noydirは、Yahoo!での検索結果がヤフーカテゴリーの情報に書き換えられることを拒否する指定です。
robots.txtはWebサイトにあるテキストファイルで、スクレイピングに対して指示を出すファイルです。Webサイトでは置いてあることが多いのでスクレイピングする前に確認しておきましょう。
次のような記述はWebスクレイピングを拒否する設定です。
Webサイトの管理者・所有者で禁止しているため、Webスクレイピングをしようとしてはいけません。
User-agent: *
Disallow: /
なお、Scrapyはrobots.txtを識別して動くので、実際に動かしてもForbiddenとしてスクレイピングしません。
Webスクレイピングはリクエストの仕方によっては短時間に大量のアクセスをしてしまうことがあり、Webサイトに対して過剰なアクセスで迷惑をかけることになります。開発時はスクレイピングのキャッシュを有効(「2.4 Scrapyの設定」にて記載)にしてできるだけ過剰なアクセスをしないように心がけてください。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
この書籍は2021年8月31日時点でのサイト情報をスクレイピングしております。それ以降にサイト更新が行われたとき正常にWebスクレイピングできなくなることがあります。
今回使用するScrapyフレームワークは、Pythonで動作します。そのため、Pythonを使用できるようにします。著者の環境はバージョン3.9.1を使用しますが、3系であれば問題ないです。
2系は日本語処理に癖がある、将来的にサポート外になるなどの問題があることから、筆者としてはオススメしておりません。
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のバージョンが低いので、アップデートしておくのもオススメします。
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も合わせてインストールします。
ソースコードを置くところを作成してから仮想環境の構築を行います。
mkdir -p scrapy-source
python -m venv .venv
仮想環境の作成ができたら、環境を切り替えます。
macOSでは、下の方法で切り替えます。
source .venv/bin/activate
コマンドプロンプトでは、下の方法で切り替えます。
.venv\Scripts\activate.bat
PowerShellでは、下の方法で切り替えます。
※実行許可がないときは、実行許可を与えてください。
.venv\Scripts\activate.ps1
WSL2では、下の方法で切り替えます。
. .venv/bin/activate
仮想環境を構築したら、Scrapyフレームワークをインストールします。
pip install scrapy
これで環境ができました。あとは好きなエディターで読み込ませれば完了です。
なお、この書籍で使用した筆者作成のソースコードはGitHubに公開しています。
この書籍ではDockerを使うことを前提で記載しています。Dockerの知識は必須ではないですが、Dockerのインストールと起動する知識があるといいです。
次のようにコマンドラインを叩いて、dockerとdocker-composeのバージョンが出るようにDockerを準備してください。
docker version
docker-compose version