如何为pandas DataFrame添加中间列,值取自表格外部的dt标签内容
你可以通过Selenium先提取<dt>标签内的统计项名称,再给对应DataFrame新增列即可,修改后的代码如下:
首先保留你原有代码直到点击统计标签、等待5秒的部分,替换后续的表格读取逻辑即可:
# 原有代码到这部分为止 elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable(( By.XPATH, "//ul[@class='fig-tabs__list']//a[@id='tab_statistics']"))) driver.execute_script("arguments[0].click();", elem) sleep(5) # ----------------- 新增/修改部分开始 ----------------- # 方案1:匹配你原有选择的表格索引,适配现有逻辑 # 提取所有dt标签的统计项名称 stat_names = [dt.text.strip() for dt in driver.find_elements(By.XPATH, "//div[contains(@id,'match-teamstats')]//dl/dt")] # 读取页面所有表格 all_dfs = pd.read_html(driver.page_source) # 你之前选择的表格索引顺序 selected_df_indexes = [5,4,1,2,7,12,16,17,22] processed_dfs = [] for idx, df_idx in enumerate(selected_df_indexes): tmp_df = all_dfs[df_idx].copy() # 给当前表格新增Stats列,赋值对应统计项名称 tmp_df['Stats'] = stat_names[idx] processed_dfs.append(tmp_df) # 合并所有表,调整列顺序把Stats放到两队中间 stats = pd.concat(processed_dfs, ignore_index=True) stats = stats.reindex(columns=['Borussia Dortmund', 'Stats', 'Borussia Mönchengladbach']) print(stats)
如果担心页面表格索引变动导致匹配错误,可以用更稳妥的方案,直接遍历每个统计块提取对应数据:
# 方案2:直接逐个取统计项和对应表格,不受全局表格索引变动影响 processed_dfs = [] # 定位所有统计块dl元素,每个dl对应一个统计项+表格 dl_elements = driver.find_elements(By.XPATH, "//div[contains(@id,'match-teamstats')]//dl") for dl in dl_elements: # 提取统计项名称 stat_name = dl.find_element(By.TAG_NAME, 'dt').text.strip() # 提取当前块下的表格HTML table_html = dl.find_element(By.TAG_NAME, 'table').get_attribute('outerHTML') # 读取表格为DataFrame tmp_df = pd.read_html(table_html)[0] tmp_df['Stats'] = stat_name processed_dfs.append(tmp_df) # 合并调整列顺序 stats = pd.concat(processed_dfs, ignore_index=True) stats = stats.reindex(columns=['Borussia Dortmund', 'Stats', 'Borussia Mönchengladbach']) print(stats)
两种方案运行后都可以得到你需要的带中间统计项列的DataFrame。
内容的提问来源于stack exchange,提问作者filipakous
相关产品推荐
相关产品推荐

