求助:如何抓取指定日期无ID的目标网页表格数据?
解决方案
方法1:通过日期关联定位表格
目标页面中2010年1月29日的表格通常会和对应日期标签关联,你可以先定位到日期元素,再通过兄弟/父节点定位相邻表格:
# 定位包含目标日期的元素(适配页面可能的日期文本格式) date_element = driver.find_element(By.XPATH, "//*[contains(text(), '29 de enero de 2010') or contains(text(), '2010-01-29')]") # 获取日期元素的下一个表格节点 target_table = date_element.find_element(By.XPATH, "./following-sibling::table[1]") # 提取表格数据 rows = target_table.find_elements(By.TAG_NAME, "tr") table_data = [] for row in rows: cols = row.find_elements(By.TAG_NAME, "td") row_data = [col.text.strip() for col in cols] if row_data: # 过滤空行 table_data.append(row_data)
方法2:遍历区域内表格,匹配内容特征
如果日期和表格关联性弱,可遍历目标区域内所有表格,通过内容特征筛选目标表格:
table_area = driver.find_element(By.ID,'ctl00_cphContent_pnContenidoAnteriorMnASP') all_tables = table_area.find_elements(By.TAG_NAME, "table") target_data = [] for table in all_tables: table_text = table.text # 通过日期关键词匹配目标表格 if "2010" in table_text and "enero" in table_text and "29" in table_text: rows = table.find_elements(By.TAG_NAME, "tr") for row in rows: cols = row.find_elements(By.TAG_NAME, "td") row_data = [col.text.strip() for col in cols] if row_data: target_data.append(row_data) break # 找到后停止遍历
方法3:利用样式类定位
如果目标表格有独特的CSS类(比如边框类、数据表格类),可结合区域和类名定位:
table_area = driver.find_element(By.ID,'ctl00_cphContent_pnContenidoAnteriorMnASP') # 替换为页面实际的表格样式类 target_table = table_area.find_element(By.CSS_SELECTOR, "table.table-bordered") # 提取数据逻辑同方法1
额外优化:确保页面加载完成
添加显式等待避免元素未加载的问题:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待目标区域加载完成 table_area = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, 'ctl00_cphContent_pnContenidoAnteriorMnASP')) )
内容的提问来源于stack exchange,提问作者Edu2694
相关产品推荐
相关产品推荐

