如何用Selenium从<tr><td>标签提取表格文本?附尝试代码
使用Selenium提取HTML表格和中的文本内容
你已经导入了必要的工具库,不过KRX的市场数据页面是动态加载的,直接定位元素很容易因为页面未加载完成抛出NoSuchElementException。我调整了代码,加入等待逻辑来确保表格元素加载完成,同时实现从和中提取文本的功能:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException # 初始化Chrome浏览器(确保已配置好ChromeDriver环境) driver = webdriver.Chrome() url = 'http://marketdata.krx.co.kr/mdi#document=080120&547c5e15ef32e37dc099b89d69ac8970-[object%20HTMLDivElement]=1&547c5e15ef32e37dc099b89d69ac8970-[object%20HTMLDivElement]=2' driver.get(url) try: # 等待目标表格加载完成,最多等待10秒(可根据页面实际加载速度调整) # 这里先用通用的table标签定位,若页面有多个表格,可通过ID/类名精准定位(需查看页面源码确认) target_table = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, "table")) ) # 获取表格内所有<tr>行元素 table_rows = target_table.find_elements(By.TAG_NAME, "tr") # 遍历每行,提取<td>单元格文本 extracted_data = [] for row in table_rows: # 获取当前行的所有<td>单元格 row_cells = row.find_elements(By.TAG_NAME, "td") # 提取每个单元格的文本,去除前后空白,过滤空单元格 cleaned_row = [cell.text.strip() for cell in row_cells if cell.text.strip()] if cleaned_row: # 跳过无内容的空行 extracted_data.append(cleaned_row) # 输出提取到的表格数据 for idx, row_content in enumerate(extracted_data, 1): print(f"第{idx}行数据:{row_content}") except TimeoutException: print("表格加载超时,请检查网络或延长等待时间") finally: # 操作完成后关闭浏览器 driver.quit()
额外提示:
- 精准定位表格:如果页面存在多个表格,打开浏览器开发者工具(F12),找到目标表格的
id或class属性,将定位方式改为By.ID("table_id")或By.CLASS_NAME("table_class"),避免定位到错误表格。 - iframe处理:若表格嵌套在
<iframe>中,需要先切换到iframe再定位元素,示例代码:driver.switch_to.frame("iframe_id"),操作完成后切回主文档:driver.switch_to.default_content()。 - 数据存储:如果需要将提取的数据保存为CSV或Excel,可结合
pandas库,将extracted_data转为DataFrame后导出。
内容的提问来源于stack exchange,提问作者Hannah Lee
相关产品推荐
相关产品推荐

