前提・実現したいこと
いつもご教示くださりありがとうございます。
競馬のデータをスクレイピングしています。
netkeibaからデータを取ってきて、自分の思った通りにスクレイピングできているのですが、
後でデータを加工できるように作った辞書(=horse_results)の中身が書き換えられてしまいます。
同時に、horse_rsultsをコピーして作ったpast_resultsも書き換えられています。
horse_resultsにpd.read_html(url2)[0]のデータが残るコードを教えてください。
発生している問題・エラーメッセージ
エラーではないのですが、horse_resultsに格納したデータが上書きされてしまいます。
該当のソースコード
import requests import re from bs4 import BeautifulSoup import time import pandas as pd from datetime import datetime as dt url = 'https://race.netkeiba.com/race/shutuba.html?race_id=202005021212' html = requests.get(url) html.encoding = 'EUC-JP' soup = BeautifulSoup(html.text, "html.parser") time.sleep(1) syusso = soup.find('table').find_all('a', attrs = {'href': re.compile('^https://db.netkeiba.com/horse/')}) syusso_list = [] for uma in syusso: horse_id = re.findall(r'\d+', uma['href']) syusso_list.append(horse_id[0]) horse_results = {} for horse_id in syusso_list: url2 = 'https://db.netkeiba.com/horse/result/' + horse_id horse_results[horse_id] = pd.read_html(url2)[0] past_results = horse_results.copy() processed_horse_results = {} for horse_id, df in past_results.items(): df['日付2'] = [dt.strptime(i, "%Y/%m/%d") for i in df['日付']] df['コース'] = df['距離'].map(lambda x:str(x)[0]) df['距離2'] = df['距離'].map(lambda x:str(x)[1:]).astype(int) df.drop(['天気', '映像', '頭数', '枠番', 'タイム指数', '通過', 'ペース', '上り','騎手', 'R', '馬場指数', '斤量', 'オッズ', '人気', '馬体重',\ '厩舎コメント', '備考', '賞金', '勝ち馬(2着馬)', '日付', '距離', '馬番'], axis = 1, inplace = True) processed_horse_results[horse_id] = df
試したこと
processed_horse_results以下をコメントアウトして、horse_resultsとpast_resultsにはBeautifulSoupで抽出したデータが入っていることを確認しました。
補足情報(FW/ツールのバージョンなど)
Jupyter Labを使っています。
回答1件
あなたの回答
tips
プレビュー