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

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

PERFECT選手名鑑をPython-PandasでWebスクレイピング

スポンサーリンク

はじめに

震災から7年。

プログラミングに対する意欲は低迷していた。

たいしてスキルも無いけれど、それなりにはプログラミング出来ます。しかし、その対象物が無いorz

ただ、PERFECTの選手名鑑やランキングを見ていて、意欲が戻って来ました。

選手名鑑見づらくない???

ということで、選手名鑑をごっそりスクレイピングして、DBにぶっこんでやろうかと思いついてしまった。

ただ、これはお勧め出来る手法ではありません。個別ページに何度もアクセスすることは、サーバーへの負担に繋がります。

従って、アクセスの間隔を充分に保ちつつ、負荷の少ない時間帯などを見計らってやっていかなければならないと思います。

試しに、本野千秋(もとのちあき)プロの選手名鑑を。。。

言語&ライブラリ

  • Python

  • Pandas

スクレイピングと言えば、昔はPerlあたりだったんだけれども、数年前くらいにRubyのスクレイピング本が出版され、トレンドが変わった気がします。

今は、Python一択のような気がします。

Pandasは、科学技術用のライブラリなんですが、スクレイピングにも使えます。今回は、HTMLのテーブルをごっそり読み込みたかったので、Pandasを使いました。

Pandas=パンダ達

誰だ?こんなに素敵な名前をつけたのは。

サンプルコード

>>> import pandas

>>> url = "http://member.prodarts.jp/players_detail.php?mem_no=5340"

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

>>> df
[          0              1
0        名前          本野 千秋
1      都道府県            兵庫県
2   ホームショップ  glad 北新地【大阪府】
3      生年月日     1987-11-11
4       血液型              O
5        身長          163cm
6       利き腕              右
7    得意ナンバー            16T
8        趣味            NaN
9    プロ資格取得          201810      初参戦      2018年 開幕戦
11     主な戦績            NaN
12      NaN            NaN
13      NaN            NaN
14      NaN            NaN
15      NaN            NaN,         0                  1
0     バレル      DMC CHIAKI SP
1    フライト  L-style オリジナルフライト
2    シャフト  L-style ラロカーボン330
3     チップ  L-style リップポイント 白
4  アクセサリー  L-style リップポイント 白,           0   1
0  Count UP NaN
1       PPD NaN
2       MPR NaN
3    Rating NaN
4        現在 NaN]
>>>

とまぁこんな感じです。

応用方法

取得したテーブルは三次元配列になっているので、例えばバレルの情報を取得したい場合は、以下のように取得します。

本野千秋(もとのちあき)プロ

$ df[1][1][0]
'DMC CHIAKI SP'

必殺、DMC CHIAKI SPが取得出来た!!!

これだけだと、すごさが伝わらないかもしれません。

PERFECTの選手名鑑のDBは、内部的には選手個人のIDを持っているようです。

本野千秋(もとのちあき)プロの場合は、「5340」です。

小林知紗(こばやしちさ)プロ

次は、小林知紗(こばやしちさ)プロ(mem_no=2747)の選手名鑑をスクレイピングしてみましょうか!

urlを変更して、もう一回取得しなおします。

>>> url = "http://member.prodarts.jp/players_detail.php?mem_no=2747"
>>> df = pandas.io.html.read_html(url)
>>> df[1][1][0]
'小林知紗model (secret)type2'

小林志帆(こばやししほ)プロ

次は、小林志帆(こばやししほ)プロ(mem_no=5176)だ!

>>> url = "http://member.prodarts.jp/players_detail.php?mem_no=5176"
>>> df = pandas.io.html.read_html(url)
>>> df[1][1][0]
nan

これはダメなんですね。。。元々、選手名鑑にデータが未記入だったためです。

すべての選手のページをスクレイピングすれば、、、

全員の使用バレルの情報が取得出来てしまう!!! すごい!!!

が、、、

PERFECTの選手名鑑の情報は、選手個人が未入力だったり、メンテしていない古い情報が設定されていたりするので、現実的には有効なデータにはならないでしょうねぇ。

ただ、夢のある話ではあります。

全選手の生まれた年度などのグラフなども作成出来ちゃう。。。

僕はやりません。個人情報の扱いが怖いので。。。

Pythonでスクレイピングのお勧め書籍

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

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

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

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