You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Beautiful Soup无法加载表格数值,如何提取指定Settle列?

解决ASX Energy网站Settle数据爬取问题

问题原因

你用urllib.request获取的是网站静态HTML,但该页面的期货表格数据是通过JavaScript动态渲染生成的,静态HTML里不包含这些数值,所以直接解析静态内容拿不到目标数据。

解决方案:用Selenium动态渲染页面

通过模拟浏览器加载页面,等待JavaScript执行完成后再提取数据,步骤如下:

  1. 安装依赖包
pip install selenium

同时需下载对应浏览器的驱动(比如Chrome浏览器的ChromeDriver,版本需和浏览器匹配)。

  1. 完整爬取代码
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

# 初始化Chrome驱动(确保ChromeDriver路径正确,若已配置环境变量可直接用webdriver.Chrome())
driver = webdriver.Chrome()
url = "https://www.asxenergy.com.au/futures_au"
driver.get(url)

try:
    # 等待表格加载完成(最多等待10秒)
    table_container = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "table-responsive"))
    )
    
    # 获取表格所有行
    rows = table_container.find_elements(By.TAG_NAME, "tr")
    
    # 定义要提取的目标州
    target_states = ["New South Wales", "Victoria", "Queensland", "South Australia"]
    settle_result = {}
    
    # 遍历行提取对应数据
    for row in rows:
        cells = row.find_elements(By.TAG_NAME, "td")
        if len(cells) >= 2:
            state = cells[0].text.strip()
            if state in target_states:
                settle_value = cells[1].text.strip()  # Settle列对应第二列(索引1)
                settle_result[state] = settle_value
    
    # 输出结果
    for state, value in settle_result.items():
        print(f"{state}: {value}")
        
finally:
    # 关闭浏览器释放资源
    driver.quit()
  1. 代码说明
  • 用WebDriverWait等待表格容器加载,避免因页面未渲染完成导致元素找不到
  • 通过类名table-responsive定位表格外层容器,再遍历行和单元格
  • 匹配目标州名称,提取对应行的第二列(Settle列)数据
  • 最后关闭浏览器释放资源

内容的提问来源于stack exchange,提问作者Jwem93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:32:37