どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

Pythonでクローリング&スクレイピング

世の中はデータで溢れているとは言うものの、一般人がそのままデータ解析に使いやすいファイル・データはなかなか手に入らないものです。

今回は、世の中にあるWebページから、必要なデータを収集して解析できるファイルを作成することを目標に、スクレイピングを勉強してみました。

参考にさせていただいのはこちらの本です。

今回はその勉強のメモです。

スクレイピング?クローリング?

書店なんかで、スクレピングの本を探すと、一緒にクローリングの本も見つかります。 参考にさせていただいた書籍によれば、定義は下記の様になっています。

  • クローリング
    • Webページのハイパーリンクをたどって次々にWebページをダウンロードする作業
  • スクレイピング
    • ダウンロードしたWebページから必要な情報を抜き出す作業

とは言うものの、Webページをダウンロードするだけのケースはあまり多くなく、多くの場合はWebページの中の欲しい情報だけを抜き取る用途のほうが多いと思いますので、日常会話でスクレイピングというと「クローリング+スクレイピング」という意味合いが強いような気もします。

Pythonを使うメリット?

クローリングもスクレイピングも、どんな言語でやっても同じことができます。 Pythonじゃなくてもできますが、参考書籍によれば、

  • 言語自体の特性
  • 強力なライブラリ
  • スクレイピング後の処理との親和性

だそうです。 個人的には、データ分析等の目的でスクレイピングを行う際には、ユーザーがPythonを使えることが多いので、その延長でPythonでスクレイピングができるというのは学習コストの削減という意味で大きなメリットなきがします。

著作権とマナー

著作権

※私は法律の専門家ではないので、個別の話はその道の専門家に相談することをおすすめします。

下記の記事を参考に確認します。

www.itmedia.co.jp

こちらの記事によると

簡単に言うと「情報解析」のためであれば、必要な範囲で、著作権者の承諾なく著作物の記録や翻案ができる、というものです(ただし一部例外あり)。

 従って「情報解析」に「機械学習・深層学習」が含まれるとすれば、「機械学習・深層学習」のためであれば著作物について著作権者の承諾なく自由に記録や翻案ができる、ということになります。

 そして、この点については、私が知る限りでは、「情報解析」に「機械学習・深層学習」は含まれる、すなわち「機械学習・深層学習」に著作権法47条の7は適用されるという意見が多数を占めていると思います(後述しますが、この点については改正法ではより明確になりました)。

 そのような見解に立つと、たとえ他人の著作物であっても、機械学習・深層学習のためであれば著作権法47条の7により無許諾で自由に利用できる、ということになります。 改正著作権法が日本のAI開発を加速するワケ 弁護士が解説

ということで、分析の用途であれば多くの場合著作権的にOKとなる場合が多いようです。

ただし、会員制のサイトの中身や特殊な事情でサイト主から拒否される場合や、違法コンテンツなどについては当然NGとなります。 グレーゾーンだと感じた際には、その道の専門家に聞くことを強くおすすめします。

マナー

さて、法律的にはOKだとしても、クローリング・スクレイピングをする際には一定のマナーがありますので、そちらにも気をつける必要があります。

主な焦点として、サービス提供主のサーバー負荷が挙げられます。 基本的には、節度を持った常識の範疇で行うことが求められます。 あまりにもひどいとサーバー側でDoS攻撃とも取られかねないので注意が必要です。

サービス本来の業務に支障を与えないために同時接続数は最小限にする必要がありますし、クロールの時間間隔についても多くの場合1秒以上取ることが多いようです。また、robots.txtに適切なクロール間隔などが明記されていることがありますので、その辺を確認しつつ行う必要があります。

その他、こちらの記事も非常に参考になりますのでご一読することをおすすめします。

vaaaaaanquish.hatenablog.com

スクレイピング

スクリプトのサンプル

こちらの記事を参考に試しにやってみます。

qiita.com

Googleの検索窓にクエリ文字をいれて、検索結果をスクリーンショットする挙動になっています。

クラスを見つける

こちらの記事を参考にしました。

watlab-blog.com

Googleの検索結果にはclass="LC20lb"が使われているようなので、そちらをすべて抽出します。

出力としてはこんな感じです。

Welcome to Python.org
プログラミング言語 Python
Python - ウィキペディア
Pythonってどんな言語なの? (1/2):Python入門 - @IT
Python | プログラミングの入門なら基礎から学べるProgate[プロ ...
Pythonの開発環境を用意しよう!(Windows) | プログラミングの ...
京都大学、Pythonによるプログラミング演習教材を無料公開 ...
Pythonとは?言語の特徴から学習法まで初心者向けにわかり ...
Python入門 ~Pythonのインストール方法やPythonを使った ...
プログラミング言語のPythonとは?その特徴と活用方法|発注 ...

その他idなどでもelementを見つけられるようなので、その辺を駆使して欲しいデータを調べられそうです。

感想

いろいろ事情があって、Webスクレイピングでデータを収集したくなったので、今回はそのお作法について勉強してみました。 一見難しそうでしたが、やってみると意外とすんなりできました。

お作法に則ってやっていきたいと思います。