
・Webサイト使って予想してるけど、必要な情報だけほしい。
・ 情報収集がめんどう・・・。
競馬予想の情報収集にどのくらい時間をかけてますか?
この記事で紹介するWebスクレイピングを使えば、予想に必要なデータを効率よく集めることができます。
Webスクレイピングとは、Web上の情報を取ってくる技術のことで、筆者はこの技術を、いろいろなサイトを転々としながら独学で習得し、今でも競馬予想に役立てています。
これまでプログラミング未経験だった筆者ですが、それでも頭のなかの予想法を形ににできたので、この記事を見ているあなたでもできるはず。
この記事では、Webスクレイピングの基礎部分を、初心者の方でも理解できるように分かりやすく説明するので、読みながら又は読んだ後すぐにでも、手軽にスクレイピングをはじめることができます。
1.Pythonの準備
Webスクリレイピングの方法は幾つかありますが、今回はPythonというプログラミング言語を使用します。
理由は、スクレイピングでググったら出てきたから…ではなくて、データ取得の方法が幅広く、実践記事もネットに多く情報収集しやすいからです。
上記の理由は、後付け感がありますが、実際に素人の筆者でもなんとか理解できている点から、プログラミング学習の敷居は低いのかも知れません。
手順1.Pythonのダウンロード
早速、ご自身のPCにPythonをインストールしましょう。
インストール方法は、Windows10を前提に話を進めていきますが、iOSでも専用のインストーラーがあるのでインストールできます。
以下のURLにアクセスします。
Pythonのダウンロードページ(Windows版)
https://www.python.org/downloads/windows/
画面左にバージョン表記のリンクがあるのでクリックします。
※2020年5月時点で最新は3.8.2
クリック後に表示された画面下部の「Files」にダウロード可能なファイルが表示されているので、OSが64bit版であれば「Windows x86-64 executable installer」を32bit版であれば「Windows x86 executable installer」をクリックして、ダウンロードします。
手順2.Pythonのインストール
ダウンロードしたファイルを実行します。
「Install Now」を選択し、インストールを道なりに進めます。
インストールが完了したら、コマンドプロンプトを起動し動作確認を行います。
Windowsキー+Rを押下し、「cmd」と入力します
コマンドプロンプトが起動後、「py」を入力しEnterキーを押下します。
バージョン表記とともに下図のように「>>>」が表示されればインストールは成功です。
手順3.ライブラリのインストール
Webスクレイピングに必要なライブラリをインストールします。
ライブラリの説明はここでは割愛しますが、現時点では「いろいろな機能をひとまとめにしたもの」と記憶して下さい。
今回は以下の2つを使用します。
・Requests
HTTP 通信ライブラリ
・BeautifulSoup
HTMLやXMLからデータを引き出すことができるライブラリ
コマンドプロンプトを立ち上げ直し、以下のコマンドを入力しEnterキーを押下します。
「Successfully installed ~」と表示されれば成功です。
py –m pip install requests
同様に以下のコマンドを入力しEnterキーを押下します。
py –m pip install BeautifulSoup4
BeautifulSoupのインストールも「Successfully installed ~」と表示されれば成功です。
これで環境の準備が完了しました。
2.Pythonを触ってみよう
実際にWebスクレイピングをする前に、Pythonについて少し説明しておきます。
ここでは必要最低限の知識に絞って説明するので、大部分は割愛しています。
Pythonの知識を深めたい方に向けて公式ドキュメントを紹介しておきます。
Python 3.8.3 公式ドキュメント
https://docs.python.org/ja/3/contents.html
・import文
Import文とは、モジュールやパッケージ、ライブラリを自作のプログラムに組み込むための作法です。
ライブラリについて、先ほども触れましたが、モジュールやパッケージも現時点では「いろいろな機能の集合体」と頭の隅において下さい。
import文は、あるパッケージやライブラリの機能を使いたいと思ったときに、使用する前に読み出して約束事です。
今回のWebスクレイピングでは、先ほどインストールしたRequestsを読み出すのに使用します。
モジュールやパッケージについて、かなり乱暴な説明をしているので、専門家のお叱りを受けそうですが、他に押さえて おくべきは規模感の違いだと考えています。
モジュール→パッケージ→ライブラリの順で規模感が大きくなるイメージで、それぞれでいろいろできるって認識です。
・変数
Pythonに限らず、プログラム理解するうえで避けて通れないのが変数です。
プログラムを実行して実行結果をあとで使いたいときに使用します。
Pythonにおける変数は、値を保管しておく名前のついた箱と考えると分かりやすいと思います。
また、変数名にはいくつか決まりがあるので、覚えておく必要があります。
- 先頭に数字は使用できない。
- 大文字と小文字は区別される。
- 英数字と_が使用できる。
例えば以下のように100を代入し、変数を呼び出すと実行結果として100が返ってきます。
atai = 100 atai #実行結果 100
・コメント
コメントの書き方は、記述したコードや文字列の先頭にひとつだけ半角の#を付けます。
#を付けた部分は、説明文と判断され処理の対象から外れます。 (このことをコメントアウトといいます。)
プログラムは、書かれた内容が正しければ、こちらが意図したものかは別にして実行されます。逆にプログラムに間違いがあると、実行したときにエラーが返ってきます。
私のようにヘボだとエラーばっかり返ってきて、プログラムのどこが問題か分からない状況に陥ります。
このときにコメントを使用するのも便利です。
何かしらのエラーに遭遇した場合に、怪しい部分のコメント扱いにして実行を繰り返すことで、原因を特定できることがあります。
・print文
Webスクレイピングをしていると、取得したデータを目で確認したくなるときがあります。
このときPrint文を使用うことで実行結果や取得データを表示させることができます。
書き方は簡単で、以下のコードでは変数dataに格納された文字列を表示しています。
data = “Hellow” Print(data) #実行結果 Hellow
3.心構え
さあこれで環境も基礎知識も準備万端。いざスクレイピング!と行きたいところですが、その前に注意事項について話しておきます。
・対象のWebサイトがスクレイピングNGの場合はダメ
書いてある通りですが、Webサイトの利用規約などに「スクレイピング禁止」とあれば素直にやめましょう。
また、取得した情報の取り扱いについても十分気を付けましょう。
違反した場合、法的に訴えられる可能性があります。
・サーバーに負荷がかかると心得る
Webスクレイピングは、サーバーにアクセスするため、アクセス頻度が多いほどサーバーに負荷をかけることになります。
他の利用者がアクセスできないなど迷惑をかけることになるので、連続してのアクセスはやめ、節度を持って行いましょう。
なお、Webスクレイピングの練習用に以下を用意しています。
以降の説明ではこのURLを使用します。
4.Webスクレイピングをやってみる
手順1.Webページを取得する
少し前置きが長くなりましたが、ここから実際に作業をはじめましょう。
Requestsを使ってWebページを取得します。
対象は先ほど紹介したURLを使います。
以下はWebページを取得し、そのHTTP レスポンスステータスを表示させています。
200が返ってくれば情報の取得は成功です。
import requests url = requests.get('http://umano-ie.com/racesample/') #Webページを取得 print(url.status_code) #HTTP レスポンスステータスを表示 #実行結果 200(リクエスト成功)
手順2.HTMLページから情報を抽出する
次にWebページから情報を抽出します。ここで BeautifulSoupを使用します。
取得したい情報がHTMLのどこにあるのか調べておきましょう。
ブラウザによって調べ方は異なりますが、chromeならディベロッパーツール、Edgeなら開発者ツールを使用して確認することができます。
スクレイピングはHTMLの要素を指定して行うことになります。
HTMLの基礎知識を学習したい方は以下を参考にしてください。
HTMLの要素の一例
- リンク <A>
- タイトル <TITLE>
- 見出し <h1>~ <h6>
BeautifulSoupはURLを取得できないので、Requestsと組み合わせてスクレイピングをします。
以下では、RequestsでURLをを取得し、HTML要素のタイトルを表示させています。
6行目の”html.parser”は、htmlを元にパーサ(parser = 構文解析)するという意味です。
import requests from bs4 import BeautifulSoup url = requests.get('http://umano-ie.com/racesample/') #Webページを取得 soup = BeautifulSoup(url.text, "html.parser") #htmlを元に解析 print(soup.find_all("title")) #記事のタイトルを抽出 #実行結果 <title>出馬表サンプル | うまのいえ</title>
BeautifulSoupの知識を深めたい方に向けて以下を用意しています。
参考にしてください。
5.まとめ
環境構築からWebスクレイピングの実行まで、順をおって説明させて頂きました。
これでさくっとWebスクレイピングを体験することができたと思います。
実際、これでは不十分であることは承知していて、個々人のやりたいことに合わせてカスタマイズが必要となってくるかと思いますが、実用的な話については随時、発信していきます。
「うまのいえ」では、今後もWebスクレイピングのネタを中心にブログを更新していきます。
また、足を運んでいただけると喜びます。
ご清聴ありがとうございました。