Python Selenium无法提取Zaubacorp网站表格数据,请求排查问题
问题排查与修正方案
1. 表格定位条件完全错误
原代码判断表格的条件是'list-group-item' in t.get_attribute('class'),但list-group-item是表格内**链接标签<a>**的类名,并非目标表格的类名。目标表格的类属性为table table-hover table-striped,这个条件直接导致无法匹配到正确表格。
2. 等待机制不够可靠
仅依赖隐式等待可能无法确保表格完全加载完成,尤其在headless模式下页面渲染速度不稳定,容易出现元素未加载完成就执行查找的情况。
3. Headless模式兼容性缺失
部分网站会对headless模式进行限制,缺少必要的浏览器环境模拟参数,可能导致页面布局异常或元素加载失败。
修正后的代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import pandas as pd url = 'https://www.zaubacorp.com/company-list' # 配置Chrome选项,优化headless模式兼容性 options = Options() options.add_argument('--headless=new') options.add_argument('--window-size=1920,1080') # 设置窗口尺寸,避免布局异常 options.add_argument('--disable-blink-features=AutomationControlled') # 禁用自动化检测 driver = webdriver.Chrome(options=options) driver.get(url) # 显式等待目标表格加载完成(最长等待15秒) wait = WebDriverWait(driver, 15) table = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'table.table.table-hover.table-striped'))) # 提取表格数据,区分表头和内容行 data = [] # 提取表头 header_cells = table.find_element(By.TAG_NAME, 'thead').find_elements(By.TAG_NAME, 'th') headers = [cell.text for cell in header_cells] data.append(headers) # 提取数据行 rows = table.find_element(By.TAG_NAME, 'tbody').find_elements(By.TAG_NAME, 'tr') for row in rows: row_data = [cell.text for cell in row.find_elements(By.TAG_NAME, 'td')] data.append(row_data) # 转为带列名的DataFrame并输出 results = pd.DataFrame(data[1:], columns=data[0]) print(results) driver.quit()
关键修正说明
- 精准表格定位:通过CSS选择器直接匹配目标表格的类名,确保找到正确的公司列表表格。
- 可靠等待逻辑:使用显式等待替代隐式等待,确保表格加载完成后再执行提取操作。
- Headless模式优化:添加窗口尺寸和自动化检测禁用参数,提升页面渲染兼容性。
- 数据结构优化:区分表头和数据行,让输出的DataFrame带有明确列名,结果更易读。
内容的提问来源于stack exchange,提问作者Kadam Jain
相关产品推荐
相关产品推荐

