【Python】サッカーのランキング表をスクレイピングする

 

こんにちは。のっくんです。

 

今日の記事では、webページにあるサッカーのランキング表をスクレイピングする方法を紹介します。

 

「Pythonでテーブルのスクレイピングがしたい」

 

そんな方に読んでいただければと思います。

 

スポンサーリンク

 

テーブルとスクレイピング

 

ネコ
スクレイピング??テーブル?よく分からないニャー。

 

のっくん
ごめん、ごめん。いきなり専門用語が出てきたね。詳しく説明するよ。

 

テーブルと言うのは、HTMLの1つの要素です。

 

以下のサッカーの順位表ページを見てください。

 

https://www.jleague.jp/standings/j2/

 

このランキング表がHTMLのテーブルでできています。先週まで首位だった松本が2位なのは非常に悔しいですが、、、

 

スポーツのサイトだけでなく、以下のような本を販売するサイトでも使っています。

 

https://www.oreilly.co.jp/ebook/

 

本のタイトルや価格、出版日が表になっていますよね。これもHTMLのテーブルで作られているんです。

 

このように特定のサイトだけでなく、ほとんど全てのサイトで使われているのがHTMLのテーブルなんです。

 

スクレイピングというのは、ウェブサイトから自分が欲しい情報を抜き出して取得することです。本屋の例でいうと、本のタイトルや価格だけ抜き出すってイメージですね。

 

少年
つまりテーブルをスクレイピングするってことは、ウェブサイトの表データを抜き出して取得するって事なんだね。
のっくん
その通り!次の章からプログラムの説明に入っていくよ。

 

テーブルの構造

 

スクレイピングを始める前に、HTMLのテーブルの構造を理解しておきましょう。

 

 

この<>で囲まれたものはタグと呼ばれます。<table>であればテーブルタグと言います。

 

色んなタグが出てきましたね。それぞれ以下のような意味を持ちます。

 

 <table> …表の始まりであることを示す
<tr> …行の始まりであることを示す
<td>  </td> …セルであることを示す
</tr> …行の終わりであることを示す
</table> …表の終わりであることを示す

http://www.newcredge.com/IT/www/html/tag/table/table-tr-td.html

 

このように、どこにどんなデータが入っているかはタグによって定義されています。

 

データが格納されている場所がタグによって定義されているので、タグの中身を取得することで必要な情報をスクレイピングすることができます。

 

つまり、tableタグ、trタグ、tdタグの順番で追っていけば欲しい情報が手に入るということです。

 

タグの中身を順番に追っていくというのは今回のプログラムの肝になりますので、覚えておいて下さいね。

 

ネコ
うーん。難しいけど、必要な情報がある場所は定義されているからそこを見に行けば良いってことなのかニャ。
のっくん
その通りだよ。次の章からはいよいよPythonのコードを書いていくよ。

 

コーディング

 

テーブルの構造を理解すると、どのデータを取得するべきかが分かります。

 

tableタグの中のtrタグのtdタグの中に欲しい情報が入っているんだな。ということが分かればあとはそれを順番に取得するコードを書いていきます。

 

必要なライブラリのインストール

 

今回のプログラムを作るために、BeautifulSoupというライブラリが必要です。

 

Anaconda Navigator(もしくはpip)を使ってインストールしてください。

 

 

インストールが終わると、上記のように表示されます。

 

プログラム

 

エディタで以下のようにプログラムを書きます。

 

scraping_j2_table.py

 

テーブルタグ内にクラス名がある場合には、クラス名を指定することでそのテーブルのみを取り出すことができます。

  1. クラス名が「scoreTable01 J2table tablesorter」のテーブルタグ内にあるtrタグのリストを取得します。
  2. trタグの中にある、tdタグもしくはthタグの中に書かれているテキストをget_textを使って取得します。取得したテキストはcsvRowリストに加えていきます。
  3. trタグ内のパースが終わったら、それをcsvに書き出します。
  4. 全てのtrタグに対して、2と3を繰り返し行う。

 

実行結果は以下の通り。

 

ranking.csv

 

無事、取得できていますね。

 

#2018/10/11日追記

チーム名がダブってる問題は、以下のように直すことで対応できました。

 

最後まで読んでいただきありがとうございました.

 

ABOUTこの記事をかいた人

のっくん

理系院卒で大企業の研究所に就職。 趣味はプログラミング、レアジョブ英会話、筋トレ、旅行。 Twitter:@yamagablog