はじめに
最近は一般的にもスクレイピングとかクローリングという言葉が浸透してきた気がします。web上のコンテンツを自動的に取得してくることを上記のスクレイピングとかクローリングといいます。厳密にはスクレイピングはコンテンツの取得までで、これを半自動的にボットのような形で行うことをクローリング等といいます。
知名度が上がってきたことで、日々Webサイトをチェックするような業務をしている方は「自分の作業が自動化できたらいいのになぁ」などと思うこともあるのではないでしょうか?ExcelVBAでのカンタンなスクレイピングはご紹介しましたが、Pythonなどエンジニアが普段使っているツールを使ってのスクレイピングとなると尻込みしてしまいそうです。
しかし、一歩ずつ努力することで、エンジニアレベルは無理でも、ある程度作業時間を減少させる程度のスクレイピングプログラムを作ることは誰でもできるはずです。本記事では基本となるPythoの標準ライブラリを用いてスクレイピングを行う方法をご紹介し、第一歩を踏み出すお手伝いをしたいと思います。
Pythonの標準モジュールを使ってスクレイピングの目的
本記事ではPythonの標準ライブラリであるurllibに含まれるrequestを用いて指定したWebサイトの内容を取得し、そのページのタイトルを表示することを目的とします。人間がマウスを使ってアクセスする以外に、Pythonのプログラムを使ってWebサイトにアクセスする方法は意外とたくさんあります。
しかし、そのすべての基礎となるのは本記事で紹介するrequestを用いた方法となります。この機能を様々改良し、自動化させたり、あるいはフレームワークと呼ばれるより高度なプログラムまで発展することもありますが、WebサイトにアクセスしてHTMLを取得することに変わりはありません。
まずは基本となる処理を理解し、今後のスムーズな学習につなげましょう。
Pythonの標準モジュールを使ってスクレイピング処理の流れ
それでは処理の流れを説明します!
urllibからrequestをインポートしてHtml取得
urllibからrequestをインポートします。urlopenメソッドで指定のurlを開き、read()メソッドで内容を取得しています。
str.split()でタイトルを取り出して標準出力に出力する
組み込み関数であるstr.split()でタイトルを取り出しています。また文字化けを防止するためにdecode()メソッドでデコード処理しています。あとはおなじみのprint()関数で標準出力に取得したタイトルを出力します。
実行結果は以下になります。
Pythonの標準モジュールを使ってスクレイピングのソースコード
ソースコードは以下になります!
from urllib import request html = request.urlopen('https://jidouka-labo.com/') contents = html.read() htmltxt = contents.decode() title = htmltxt.split('<title>')[1].split('</title')[0] print(title)
おわりに
わずか数行で、一応スクレイピングの基礎となるプログラムを作成することができました。ほとんどライブラリの力を借りることになりましたが、裏を返せばそれだけ有用なライブラリがPythonには用意されているということではないでしょうか?
本記事のプログラムをご覧になってわかるように、HTMLを取得するまではカンタンなのですが、狙った要素を取得するのは意外と難しいです。というか、スクレイピングを難しくしているのは主にこの要素取得の方法だと言えると思います。
本記事では組み込みのsplit()関数を使いましたが、このやり方ですべてのWebサイトから狙ったタグを取り出すのは至難の技です。次回以降、数回に分けてこの要素取得の方法をご説明していきたいと思います。