#さいしょに
インターネットは情報の宝の山だ!Webスクレイピング+クローリングを駆使して、データ分析をしよう!と思った人は多いのではないでしょうか?私もその一人です。
機械学習に使うためのデータ収集、データサイエンスの勉強のために等、データを簡単に入手する手段として、Webスクレイピング+クローリングの勉強をすることにしました。
本記事では、Webスクレイピング、クローリングについて勉強して感じたことをまとめています。
#Webスクレイピングとは
Webスクレイピングとは、Webサイトの情報を抽出する技術のことです。もう少し、具体的に言えば、HTML等から情報を抽出する技術です。Webサイトの情報を解析するために使います。
Webスクレイピングなら、Webページのデータ(HTML等)をダウンロードできれば、APIが公開されていないWebページの情報も取得することができます。また、ログインが必要なページにアクセスする技術があれば、ログインが必要なページであっても、スクレイピングすることが可能です。
#クローリングとは
クローリングとは、Webサイトのリンクを巡回して、Webページの情報を取得する技術です。定期的に巡回させ、ページ更新等の検知も可能です。ただし、クローリングを行うとサーバに負荷がかかるので、禁止しているサービスやBotによるクローリングを受け付けないサービスもあります。
クローリングを行うプログラムのことをクローラーやスパイダーと呼びます。
クローリングを行う際、注意しなければいけないのがリンクのパスです。パスを抽出する際、基準となるURL(クローリングを開始するページのURL)に対して絶対パスなら問題ありませんが、相対パスなら無限ループする可能性があります(互いにリンクし合っているページがあると無限ループ)。通常、クローリングする際は抽出するリンクのパスを絶対パスに変換するなど処理が必要になります。
#Webスクレイピング+クローリングにおけるトレードオフ
Webスクレイピングとクローリングの勉強をやってみると意外と簡単にできます。私の場合、Python3を使うのでBeautiful SoupやScrapy等、便利なライブラリにお世話になっています。
Webスクレイピングとクローリングができるようになると、任意のURLにアクセスし、そのページのリンク先からも情報を収集することができます。しかし、収集したデータにはいらないゴミ情報が多く含まれているので、まずそのゴミを取り除くことから始めなければなりません。
そこで、必要な情報だけ取得するためにCSSセレクタを利用します。CSSセレクタを利用することで、指定した情報だけ収集することができます。例えば、クローリングするために、リンク先のアドレスを収集したいなら、aタグのhref属性の値のみ収集するといった具合です。
しかし、CSSセレクタも万能ではありません。例えば、クローリングするためにリンク先URLを収集する際、お問い合わせページへのリンクを除けれる方が良いでしょう、広告のリンクも除ける方が良いでしょう。そこで、CSSセレクタで必要な箇所だけ情報を収集する訳ですが、CSSセレクタが全てのWebページで統一されているわけではないのです。
そこで、Webスクレイピング+クローリングでインターネットから情報収集する場合、汎用的に使えるが、大量のゴミ情報の処理も必要となるプログラムを作るか、必要な情報だけ収集できるが、CSSセレクタの調査が毎回必要になるプログラムを作るかのいずれかを選択しなければならないのです。
汎用的に使えて、必要な情報だけ収集する方法を知っているという人がいらっしゃれば、是非コメントをお願いします。
#データ分析にWebスクレイピング+クローリングを活用するなら
Webスクレイピング+クローリングのトレードオフについて書いてきましたが、本来の目的はデータ分析をすることです。(検索エンジンを作るためという人もいるかもしれませんが…)データ分析をするためのデータ収集として、Webスクレイピング+クローリングをするなら、汎用的な収集か局所的な収集かどちらが良いか判断できるようになる必要があるのではないでしょうか。
データ分析において100%の分析結果がないように、どちらの方法が絶対ということはないでしょう。どちらの方法を採用するか考え続けるくらいなら、さっさと手を動かして分析に取り組むべきだと私は思います。
#さいごに
Webスクレイピング、クローリングについて学んだこと、気付いたことをまとめました。Webスクレイピング、クローリングをやっている人、やってみたい人にとって少しでも参考になれば幸いです。