【旧】武器商人@ダーツのブログ

当ブログの内容については、リンク・引用・拡散ご自由にどうぞ。許可不要です。

PERFECTスタッツランキングをPython Pandasでスクレイピングしてみた

スポンサーリンク

キッカケ

PERFECTのランキングをガチャガチャ加工していろいろな指標を作りたい。

けど、、、

いちいちサイト見て、コピーしてエクセルで計算してっていうのが面倒。スクレイピングしようと決めた。

アプローチの仕方

通常のアプローチだと、以下のような選択

  • PythonでrequestsとBeautifulStoneSoup
  • Rubyでopen-uriとnokogiri

のいずれかなんだろうけど、ランキングのようなtableを丸っとスクレイピングするのは面倒。正規表現か何かでひっかけるのかな?と思ったけど、案外Pandasで余裕で出来るんだなと。。。

サンプルコード

一応サンプルコードを載せておきます。

環境

Python 3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.

Anaconda使っているので、Pandasのインストールは不要です。

URL設定

>>> url = "http://member.prodarts.jp/rank_stats/"

ちなみに、URLですが、過去のデータを参照したい場合は、以下のように年度を指定するようです。

http://member.prodarts.jp/rank_stats/?tournament_year=2017

pandasのインポート

>>> import pandas

html読み込み

>>> df = pandas.io.html.read_html(url)

男子のPPDランキング表示

>>> df[0]

0   RANK  PLAYER    PPD
1      1   浅田 斉吾  40.37
2      2    菅 興成  39.77
3      3    竹内 淳  39.19
・・・
・・・

女子ののPPDランキング表示

>>> df[1]
       0       1      2
0   RANK  PLAYER    PPD
1      1  佐藤 かす美  37.44
2      2   濱野 真衣  35.04
3      3   近藤 静加  34.82
・・・
・・・

男子のMPRランキング表示

>>> df[2]
       0       1     2
0   RANK  PLAYER   MPR
1      1   朝倉 理人  5.63
2      2   大石 藍貴  5.62
3      3    鈴木 徹  5.60
・・・
・・・

女子のMPRランキング表示

>>> df[3]
       0       1     2
0   RANK  PLAYER   MPR
1      1  佐藤 かす美  4.76
2      2  大内 麻由美  4.34
3      3  榎本 ゆかり  4.05
・・・
・・・

csvファイルに保存

>>> data.to_csv('stats_ranking.csv')

普通はこれで行くんだけど、ゴミデータが入って来るため、htmlコードを見てゴミデータを除去してあげないといけない。

API実装公開してくれないかなぁwww

やはり、構造化されていない手書きのランキングをスクレイピングは大変。

おすすめの書籍

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

  • 作者: コーリー・アルソフ,清水川貴之監訳,清水川貴之,新木雅也
  • 出版社/メーカー: 日経BP社
  • 発売日: 2018/02/24
  • メディア: 単行本
  • この商品を含むブログを見る
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-