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

使用Selenium抓取Knoema平台世界银行天然气价格预测数据的技术问询

解决Knoema网站天然气价格预测数据抓取问题

我注意到你的代码片段没写完(selenium.commo...部分),不过没关系,咱们一步步搞定这个数据抓取的事儿。

完整Selenium实现方案

针对Knoema这类动态渲染的网站,我给你补全并优化了代码,同时适配了常见的反爬和加载问题:

1. 先准备依赖

确保你已经安装了必要的工具包,用webdriver-manager可以自动管理浏览器驱动,不用手动下载:

pip install selenium webdriver-manager pandas

2. 可运行的完整代码

url = "https://knoema.com/ncszerf/natural-gas-prices-forecast-long-term-2017-to-2030-data-and-charts"
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.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd

# 初始化Chrome驱动(自动适配浏览器版本)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)

try:
    # 等待核心数据表格加载完成(Knoema的表格通常带k-grid类)
    table = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CLASS_NAME, "k-grid"))
    )
    
    # 提取表格行与列数据
    rows = table.find_elements(By.TAG_NAME, "tr")
    raw_data = []
    for row in rows:
        cols = row.find_elements(By.TAG_NAME, "td")
        # 过滤空值并清理文本格式
        cleaned_cols = [col.text.strip() for col in cols if col.text.strip()]
        if cleaned_cols:
            raw_data.append(cleaned_cols)
    
    # 转成DataFrame方便后续处理
    if raw_data:
        df = pd.DataFrame(raw_data[1:], columns=raw_data[0])  # 第一行作为表头
        print("抓取到的数据预览:")
        print(df.head())
        # 保存为CSV文件
        df.to_csv("natural_gas_forecast_data.csv", index=False)
        print("数据已保存到natural_gas_forecast_data.csv")
    
finally:
    # 无论成功失败都关闭浏览器
    driver.quit()

关键注意事项

  • 动态加载适配:Knoema的内容是JS渲染的,必须用WebDriverWait等待元素加载完成,不能直接用driver.find_element,否则会触发元素未找到的错误。
  • 选择器灵活调整:如果页面结构有更新,打开浏览器开发者工具(F12)重新定位表格的选择器,比如有时候表格会嵌套在特定的div容器里。
  • 反爬规避:Knoema有基础反爬机制,建议添加time.sleep(2)这类间隔时间,不要频繁请求页面;如果遇到IP封禁,可以考虑使用代理IP。
  • 数据清洗:抓取到的原始数据可能带有多余空格、换行,用strip()方法清理后再存入表格,保证数据整洁。

替代方案(如果Selenium受限)

要是遇到反爬检测导致Selenium无法正常工作,可以试试这两个更轻量的方法:

  • 抓API接口:用浏览器Network面板筛选XHR请求,找到加载数据的接口,直接用requests库请求,效率比Selenium高很多。
  • 用requests-html:这个库可以渲染JavaScript,比Selenium轻量,适合简单的动态页面抓取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:07:59