実現したいこと
netkeibaという競馬サイトの下記URL先から日付のデータを取得したいです。
https://db.netkeiba.com/horse/2021101134/
このURLから"日付"の列のデータを取得してprintするプログラムを書いてください(コードを修正する形や新規作成する方法どちらでも歓迎です)
また、なぜ戦績テーブルを取得できないのかの理由の説明もお願いします。(こちらだけ、もしくは前述の内容だけ、でも非常に助かります)
前提
戦績テーブルがあるはずなのになぜかここの取得ができなくて、htmlの指定方法を変えてみたり、(class名を部分一致で検索するようにしてみたり、何番目のtable、tbody、というような形式で検索してみたりしてみましたが全部失敗しました。助けてください;;お願います;;
セレクターで指定する方法もやってみ見ましたがダメでした。
私が何か初歩的なミスをしている可能性もかなりあると思いますが、わからないので助けてください;;
該当のソースコード
Python
1import requests 2from bs4 import BeautifulSoup 3import time 4 5# 設定 6TARGET_URL = "https://db.netkeiba.com/horse/2021101134/" 7 8def get_soup(url): 9 """URLからBeautifulSoupオブジェクトを作成する""" 10 try: 11 time.sleep(1) # サーバーへの負荷軽減のため待機 12 headers = { 13 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" 14 } 15 response = requests.get(url, headers=headers) 16 response.encoding = "euc-jp" # netkeibaはeuc-jp 17 return BeautifulSoup(response.text, "html.parser") 18 except Exception as e: 19 print(f"Error fetching {url}: {e}") 20 return None 21 22def main(): 23 print(f"アクセス中: {TARGET_URL}") 24 soup = get_soup(TARGET_URL) 25 if not soup: 26 print("ページの取得に失敗しました。") 27 return 28 29 # 戦績テーブルをクラス名で検索 30 # class="db_h_race_results" を持つテーブルを取得 31 table = soup.find("table", class_="db_h_race_results") 32 33 if not table: 34 print("戦績テーブルが見つかりませんでした。") 35 return 36 37 rows = table.find_all("tr") 38 39 print("\n--- 日付データの抽出 ---") 40 # ヘッダー行(0番目)を除いてループ 41 for row in rows[1:]: 42 cols = row.find_all("td") 43 # 日付の列が存在するか確認 44 if len(cols) < 1: 45 continue 46 47 # 日付 (0列目) 48 date_val = cols[0].get_text(strip=True) 49 print(date_val) 50 51if __name__ == "__main__": 52 main()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。