Pythonでウェブスクレイピング(ウェブサイトからの情報抽出) 〜ライブラリ紹介とウェブページのソースコードの見方〜
今回はクローリングおよびウェブスクレイピングという技を紹介したいと思います。クローリングやスクレイピングというのは簡単にいうとウェブサイトに載っている情報から自分が欲しい情報だけを抜き取ってくるための技術です。例えばウェブサイトに載っている写真だけを抜き出したり、特定の数値だけを抜き出したりといった使い方ができます。
・用語説明
①クローリング
ウェブサイトからHTML情報やそのほかの情報を取得してくる技術のこと
取得したHTML情報等から自分の欲しい情報を抜き出す技術のこと
・スクレイピング・クローリングのためのライブラリ
今回はPythonでスクレイピングをするためのライブラリーを紹介したいと思います。
①requests
こちらはウェブページを取得するためのライブラリです。
②BeautifulSoup4
こちらはウェブページからデータを抜き出すためのライブラリです。
基本的に上にあげた二つを使ってクローリング・スクレイピングをする時には、①のrequestsを使ってウェブページの情報を取得し、BeautifulSoup4を使ってデータを抜き出すという形になります。
③Scrapy
こちらはクローリング・スクレイピングの総合フレームワークとなっていて、このフレームワーク一つでウェブページの情報を取得し解析し特定情報を抜き出してくることができます。より複雑なクローリング・スクレイピングを実装したい時にはこちらを使うといいかもしれません。
調べてみたら他にも色々フレームワークはあるらしいのですが、今回は自分が使ったことあるやつのみを紹介させていただきました。
またそれぞれのライブラリの詳しい使い方は今後別記事として紹介したいと思います。と言ってもそれぞれ調べていただければすでにたくさん記事があるので、僕が書くまでもないかもしれませんが。
・ウェブサイトのHTML情報を見る方法
こちらはウェブサイトを作ったことある人なら、スクレイピング・クローリングを使ったことなくても、知っているかもしれません。
今回は検索エンジンとしてGoogle Chrome を例に、ページとして当ブログを例に使います。
まずHTML情報を見たいウェブページで右クリックをします。すると下のようになると思います。
ここで検証というところを押します。すると下のような画面となります。
このようにHTMLの情報を見ることができます。
これだけでもがんばって目視で確認していけば問題はないですが、ここで今回は3つ便利な使い方を紹介したいと思います。
①ウェブサイト上の文字とHTMLの情報の対応づけを見る方法
上の二つ目の写真の左中央の赤く囲ってあるところをクリックします。するとウェブサイト上の文字とHTMLの情報の対応づけを見るモードとなりマウスをウェブサイト上の文字のところに合わせると下のようにそれに対応するHTMLが青く強調されます。
コピーしたいHTML情報の上で右クリックをすると下のようになります。
ここでCopyというところにいくと下の写真のようにオプション付きでコピーすることができます。ここでCopy selectorをすればCSSセレクタをCopy JS pathをすればjavascriptのパスをといった具合にコピーできます。
③HTML情報の特定の文字を含む部分を見つける
ます検証画面でcommand+Fを押します(Macの場合)。すると下の写真のように下に文字を検索するところが現れます。ここに文字を打ち込めばその文字と一致する箇所を見つけてくれます。例えばclass名で検索すれば同じクラスで書かれた部分を全て見つけることができます。
最後にHTML情報だけを大画面で見る方法を紹介します。先ほどと同様にウェブページで右クリックをします。すると下のような画面になります。
ここで先ほどは検証を押しましたが、今度はページのソースを表示を押します。すると大画面でHTML情報を見ることができます。
・クローリング・スクレイピングの使い所
①定期的に更新されるものの情報を抜き出す(例株価、売上情報等)
定期的に更新されるものを毎回手動でウェブサイトからコピーしてきて手元に保存するのは大変ですよね。そんな時スクレイピングのコードを書いておけば、そのコードを実行するだけで、情報を抜き取ることができます。ただしウェブサイトの構造(htmlに書かれたタグやclassなどのこと)が変わったらスクレイピングのコードも書き直さないといけません。
②機械学習などのために大量のデータをネットから拾ってくる(例 google検索の画像検索に載っている画像を上から100個ダウンロードしてくる)
機械学習などで大量のデータが必要な時にそれを全て手動でダウンロードしてくるのは大変ですよね。そんな時にもスクレイピング・クローリングは役に立ちます。何かしらの規則を作ってウェブページを順番に取得し、それらのページに対して処理をしていけばいいです。例えば上の例ではgoogle検索の画像検索で上位から順番に100個目のサイトまでという規則を作り順番にウェブページを取得し、取得してきたページから画像を抜き出すという処理をすれば良いです。
経営者とかだとスクレイピングした情報から経営戦略を立てたりとかに活用されたりもされているようですが、個人で趣味としてやっていることに使えるのはこの辺りかなと思います。いずれにせよ共通しているのは大量のデータを抜き出すという点です。少数のデータを抜き出す場合にはわざわざプログラムを書くよりも手動で抜き出した方が早いなんて場面も多いでしょう。
・注意点
スクレイピングを使うことで、ネットから情報を抽出してくることができますが、この方法はウェブサイトの運営者が公式にサポートしているものではありません。当然著作権に引っかかるような情報を勝手に自分の利益のために公開したりとかしてはいけません。場合によっては訴訟問題に発展しているものもあるようです。スクレイピングできたからといって、権利等を無視して使えるわけではありません。あくまでデータ取得する手間であって、取得したデータの使い方は普通に手動で情報取得した場合と同じです。
今回はスクレイピングおよびクローリングという技術を紹介させていただきました。面白そうと思った人はぜひ実装してみてください。特に大量のデータをネットから拾ってこないといけない作業をしなければいけない人は覚えておくと便利です。