使用Python Beautiful Soup无法加载表格数值,如何提取指定Settle列?
解决ASX Energy网站Settle数据爬取问题
问题原因
你用urllib.request获取的是网站静态HTML,但该页面的期货表格数据是通过JavaScript动态渲染生成的,静态HTML里不包含这些数值,所以直接解析静态内容拿不到目标数据。
解决方案:用Selenium动态渲染页面
通过模拟浏览器加载页面,等待JavaScript执行完成后再提取数据,步骤如下:
- 安装依赖包
pip install selenium
同时需下载对应浏览器的驱动(比如Chrome浏览器的ChromeDriver,版本需和浏览器匹配)。
- 完整爬取代码
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()
- 代码说明
- 用
WebDriverWait等待表格容器加载,避免因页面未渲染完成导致元素找不到 - 通过类名
table-responsive定位表格外层容器,再遍历行和单元格 - 匹配目标州名称,提取对应行的第二列(Settle列)数据
- 最后关闭浏览器释放资源
内容的提问来源于stack exchange,提问作者Jwem93
相关产品推荐
相关产品推荐

