質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

4回答

5700閲覧

netkeibaの出馬表をスクレイピングしたい

Azzukky

総合スコア9

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/05/17 00:46

前提・実現したいこと

netkeibaの出馬表には、出走馬の過去5走成績が掲載されています。
この出走表から必要な要素だけを抽出したいのですが、成績欄に記載されている内容をうまく抽出できません。

発生している問題・エラーメッセージ

IndexError: list index out of range

該当のソースコード

import pandas as pd url = 'https://race.netkeiba.com/race/shutuba_past.html?race_id=202005020711&rf=shutuba_submenu' kosc = pd.read_html(url)[0] kosc.drop(['枠', '印'], axis = 1, inplace = True) kosc['前走'].map(lambda x: x.split()) 出馬表を取ってきて、不要な2つのカラムは削除できました。 前走のカラムに様々な情報が詰め込まれているので、それぞれを取り出して整理したいと思い、 なんとなくmapとsplitを組み合わせてみたらバラバラにできましたが、 そこから(例えばレースの距離を)抽出して別のカラムとして加えることができません

試したこと

kosc['前走'].map(lambda x: x.split()[Y])

Y=0でレース日、Y=1で場所、Y=2で着順を抽出できますが、
Y=4以上はIndexError: list index out of rangeが出ます。
後ろから取ってこようとY=-1, -2, -3と入力していっても、Y=-4で同じエラーが出ます。

kosc['前走'].map(lambda x: x.split())[Y]

この場合だと、前走のY行目だけ取ってきてしまいます。

前走カラムから距離、レース名等だけを抜き出し、別のカラムを加えるコードを教えてください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

以下の記事が役に立つかもしれないと思います。
https://www.octoparse.jp/blog/scrape-horse-racing-data/

投稿2020/05/18 07:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Azzukky

2020/05/18 23:44

ご回答ありがとうございます。 上記の記事は既に拝読しておりました。 無料トライアルを使ってみようかと思いましたが、お試しでもカード情報入力を迫られたので止めました。 また、便利な反面、プログラミングのスキルを向上させるには不向きとも考えました。 会社での利用は検討します。
退会済みユーザー

退会済みユーザー

2020/05/19 10:48

Octoparseは無料でも使えるので、初心者にとっては一番簡単だと思います。 プログラミングのスキルを向上するなら、自分でコードを書くのは重要ですね。
guest

0

レースに関する情報を抽出するのに苦労している場合。個人的にはオーナーがこれと関係があると思います。ソースにバグがあるためかもしれません。これを心配する代わりに、オンラインカジノをプレイしたり、競馬についてもっと知りたいと思うかもしれません。

投稿2021/11/08 02:00

smuasher

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これをデバッグする他の方法を試しましたか?他のソースを試して、それを機能させる方法を見つけた方がよいでしょう。とにかく、なぜnetkeibaのレーステーブルをこすりたいのですか。あなたはある種のベッターですか、それとも何ですか?

投稿2021/11/08 01:47

smuasher

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

IndexError: list index out of rangeが出るのは項目数が足りないデータが含まれているからです。
データを見てみましたが、5行目(kosc['前走'][4])はフォーマットが違うので項目が足りていません。
'3ヵ月半休養鉄砲 [0.1.0.2]2走目 [1.0.1.0]'
こういった例外データを別に処理するロジックが追加で必要になりますね。

投稿2020/05/17 01:11

x98000

総合スコア1096

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Azzukky

2020/05/17 02:48

例外とするために、 if '休養' in x.split()[0] else x.split()[Y] と記載したらうまくいきました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問