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

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

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

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

492閲覧

コードを全く変えていないのに競馬ラボからのスクレイピングが成功せず、エラーが起きるようになってしまいました。原因がわからないので教えてほしいです。(おそらく処理速度が関係している気がします)

Panthalassa

総合スコア1

スクレイピング

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2025/05/15 18:35

実現したいこと

コードを全く変えていないのにスクレイピングが一部成功しなくなり、エラーが起きるようになってしまいました。原因がわからないので教えてほしいです。(おそらく処理速度が関係している気がします)

競馬ラボというサイトのこのようなページ
( https://www.keibalab.jp/db/race/202505030502/ )
から ペース:ハイ (-1.4) の部分を、自動的にURLを規則的に変更しながら日付と競馬場を遷移し、一気に数か月分程度取得するコードをつくったのですが、簡略化した下記コードのような
k_pace_5 = soup.select('div[class*="resultpacebox"]')[0].text
の部分で、複数レース分一気に取得するコードを起動したときだけout of list indexのエラーが起きるようになってしまいました。
下記コード単体で起動するとエラーは起きないのに、です。

(3競馬場開催の72レース開催の週には土日で4レース分くらい規則性なくセレクタの指定は合ってるのに急にペース取得のところでエラーが起きるという感じです。ちなみに例外処理でエラーのレースを飛ばすと次のレースからちゃんとペースを取得できてます。)

以前はコードを変えてないのに一気に数か月分ノーミスでペースを取得できたこと、(今)数か月分取得コードを起動した時々によって同じレースのペース部分に対して全く同じ処理を行っているのに例外処理が行われるときとそうでない時があることから、おそらく回線やずっと放置し続けているVSCの『ワークスペース ソースファイルの列挙に時間がかかっています。代わりにサブフォルダーを開く方法を検討してください。』など、なんらかの処理速度に関わるところがエラーに関係していると勝手に思っているのですが、どのような原因が考えられるか教えてほしいです。

ワークスペースやサブフォルダーについてはあまりわかっていませんが、VSCのタブとプログラムは一個しか開いていない状態です。

あとtime.sleepの秒数をリクエストを送る前に各10秒など広くとってみましたが、同じくエラーになってしまいました。

発生している問題・分からないこと

実現したいことを教えてくださいに書ききりました。

該当のソースコード

import requests from bs4 import BeautifulSoup import time import re load_url_kari = "https://www.keibalab.jp/db/race/202505030502/" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.3"} html = requests.get(load_url_kari, headers=headers) soup = BeautifulSoup(html.content, "html.parser") k_pace_5 = soup.select('div[class*="resultpacebox"]')[0].text print(k_pace_5)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

調べたけどいい検索結果が得られませんでした。エラーが起きたところで成功するまで時間をおいて10回以上繰り返すような例外処理なども書いてみましたがダメでした。

補足

以前はkazusaというアカウントで競馬ラボからのスクレイピングについて質問をしていましたが、アドレスを忘れてしまったので、こちらから質問しています。

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

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

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

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

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

odataiki

2025/05/16 04:17

発生したエラーメッセージを書いた方が回答が集まりやすくなると思います。
YAmaGNZ

2025/05/16 07:36

取得したHTMLはどのようになっていたのか確認されましたか? >あとtime.sleepの秒数をリクエストを送る前に各10秒など広くとってみましたが どこに入れたのでしょうか?
fiveHundred

2025/05/16 08:08

以下のようなことも考えられますが、考慮していますか? - サイトのリニューアルなど、HTMLに変更があった こうなった場合、前のHTMLのものは使えなくなるので、新しく作り直さないといけません。 - 特定の状況下での通信拒否など、サーバー側が何らかの対策を講じた その条件を避けるなども考えられますが、対策を講じられるということは、その行為を問題視しているわけですから、問題にならないようにするか、そもそも行うべきではないでしょう。
meg_

2025/05/16 10:56 編集

> (おそらく処理速度が関係している気がします) 何故そう思われたのでしょうか? > 競馬ラボというサイトのこのようなページ > ( https://www.keibalab.jp/db/race/202505030502/ ) 404 Not Found となっています。確認してください。 > から ペース:ハイ (-1.4) の部分を、自動的にURLを規則的に変更しながら日付と競馬場を遷移し、一気に数か月分程度取得するコードをつくったのですが スクレイピングは禁止されていないサイトでしょうか?
Panthalassa

2025/05/16 14:43

ご回答いただいた4人の方々、ありがとうございました。 自己解決しました。原因は取得するペースのレースが現在から大体一か月以内前程度の時は、ページがまだ更新されていない部分がある。ということでした。 (2025/05/16に見た場合) 例えば https://www.keibalab.jp/db/race/202505030502/  では着順表のページが表示されますが、末尾の『/』を消した場合の https://www.keibalab.jp/db/race/202505030502 では5着までの着順速報のようなペース表記のないページを取得してしまいます。 大体現在から一か月前よりも昔のレースでは上記例のように『/』がなくても、表示するページが全く変わらなかったため、今まではスクレイピングする際の自動作成URLを『/』なし、で指定していましたし、それで問題がありませんでした。 今回はその潜在的な問題が露呈したような形でした。 まぁ最初からちゃんと丁寧にスラッシュ付きのURLでそのまんま指定しておけよって話なんですけどね(汗)
guest

回答1

0

自己解決

ご回答いただいた4人の方々、ありがとうございました。
自己解決しました。原因は取得するペースのレースが現在から大体一か月以内前程度の時は、ページがまだ更新されていない部分がある。ということでした。

(2025/05/16に見た場合)
例えば https://www.keibalab.jp/db/race/202505030502/ 
では着順表のページが表示されますが、末尾の『/』を消した場合の
https://www.keibalab.jp/db/race/202505030502
では5着までの着順速報のようなペース表記のないページを取得してしまいます。

大体現在から一か月前よりも昔のレースでは上記例のように『/』がなくても、表示するページが全く変わらなかったため、今まではスクレイピングする際の自動作成URLを『/』なし、で指定していましたし、それで問題がありませんでした。

今回はその潜在的な問題が露呈したような形でした。

まぁ最初からちゃんと丁寧にスラッシュ付きのURLでそのまんま指定しておけよって話なんですけどね(汗)

投稿2025/05/16 14:44

Panthalassa

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問