You need to enable JavaScript to run this app. Python下Selenium/BeautifulSoup/Pandas爬取EIB动态表格失败咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python下Selenium/BeautifulSoup/Pandas爬取EIB动态表格失败咨询

问题根本原因
  • 静态抓取类方法失效的核心:requests请求、pd.read_html读取URL的逻辑,只会获取服务器返回的初始静态HTML文件,该页面的表格内容是前端JS异步请求渲染后插入DOM的,初始静态文件中根本不存在对应的表格节点,因此BeautifulSoup从静态HTML里找<tr>标签会返回空列表,pd.read_html也会直接抛出“未找到表格”的错误。
  • Selenium使用逻辑的硬伤:代码中调用driver.get(URL)后没有做任何页面渲染等待,浏览器刚打开页面、JS还没执行完异步表格加载逻辑时就立刻抓取DOM元素,此时页面中还不存在<td>节点,自然返回空列表。另外代码存在逻辑混用问题:用requests获取的静态页面对象初始化的soup,去解析Selenium拿到的渲染后页面源,解析逻辑完全错位。
  • 代码细节错误:Selenium定位部分存在语法笔误e.tex,正确属性应为e.text;同时使用了已在新版Selenium中弃用的旧版定位APIfind_elements_by_xpath,存在版本兼容性问题。
修复实现方案
  • 调整代码逻辑:放弃用静态请求的源做解析,完全基于Selenium渲染完成的页面内容做处理,通过显式等待确保目标表格节点真正加载后再抓取DOM,避免空列表问题。
  • 解析环节优化:拿到浏览器渲染后的完整HTML字符串后,直接传入pd.read_html解析为DataFrame,不需要额外拼接BeautifulSoup解析逻辑。
  • 稳定性优化:用显式等待替换硬编码的等待时间,适配页面的动态加载节奏,减少因网络波动导致的抓取失败。

修正后的可运行示例代码

from selenium import webdriver
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

# 替换为本地GeckoDriver的实际存储路径
driver = webdriver.Firefox(executable_path='/你的本地驱动路径')
target_url = 'https://www.eib.org/en/about/procurement/index.htm'
driver.get(target_url)

# 显式等待:检测到目标表格元素出现在DOM中后再继续执行,最长等待15秒
WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, '页面表格的实际CSS选择器'))
)

# 获取浏览器完全渲染后的页面源码
rendered_page = driver.page_source
# 直接基于渲染后的HTML解析表格,得到DataFrame列表
table_df_list = pd.read_html(rendered_page)
# 取列表中第一个目标表格,即为需要的采购内容
procurement_data = table_df_list[0]

# 爬取完成后关闭浏览器进程
driver.quit()

注意事项

  • 等待环节的CSS选择器,可以通过浏览器开发者工具检查目标表格的实际类名、标签属性替换,确保等待条件匹配正确的节点。
  • 若后续需要抓取分页加载的内容,可以在等待表格加载完成后,补充Selenium的翻页点击逻辑,逐页抓取渲染后的HTML解析表格,最后合并所有分页的DataFrame即可。
  • 不要混用静态请求的HTML源和Selenium的渲染后HTML源,两个来源的页面内容结构存在本质差异,混用逻辑会直接导致解析结果为空。

内容的提问来源于stack exchange,提问作者Fatima El Mansouri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 23:15:01