You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让Excel中的Power Query在1分钟内完成网页数据刷新?解决比特币价格更新延迟问题

如何加速Excel Power Query刷新CoinMarketCap比特币价格数据?

我之前处理加密货币行情数据时,也碰到过Power Query刷新慢到离谱的情况——尤其是CoinMarketCap这种动态加载内容超多的站点,默认设置下确实会浪费大量时间在加载冗余资源上。咱们先拆解问题根源,再一步步把刷新速度压到1分钟以内。

为什么你的Power Query刷新要7分钟?

主要是这几个原因拖慢了速度:

  • 全页面资源加载:Power Query默认会等待网页的所有资源(图片、广告、脚本、第三方插件)加载完成才开始提取数据,而CoinMarketCap这类站点的额外资源占比极高,大部分都和你要的价格数据无关。
  • 冗余DOM遍历:如果用了Power Query的自动数据提取功能,它会遍历整个网页的DOM树,做很多不必要的检查和解析,进一步拉长时间。
  • 无针对性的请求设置:没有限制请求超时、禁用非必要资源加载,也没利用缓存机制减少重复请求的开销。

优化方案:从7分钟到1分钟以内

方案1:直接调用API(最推荐,速度秒级)

CoinMarketCap提供了免费的公开API,比抓网页效率高太多——直接获取结构化的JSON数据,完全跳过页面渲染的环节。步骤如下:

  1. 去CoinMarketCap平台申请免费的API密钥(在API板块注册即可,免费版的调用次数足够个人使用)。
  2. 在Excel中新建一个空白查询,进入Power Query编辑器,替换成以下M代码(记得把"你的API密钥"换成你实际的密钥):
    let
        ApiKey = "你的API密钥",
        // 只请求BTC的最新行情数据
        Url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC",
        // 添加API认证头
        Headers = [#"X-CMC_PRO_API_KEY" = ApiKey],
        // 发送请求并解析JSON
        Response = Web.Contents(Url, [Headers=Headers]),
        JsonData = Json.Document(Response),
        // 提取比特币的核心数据
        BTCData = JsonData[data][BTC],
        CurrentPrice = BTCData[quote][USD][price],
        Change24h = BTCData[quote][USD][percent_change_24h]
    in
        // 转换成表格输出
        #table(
            {"比特币当前价格", "24小时涨跌幅"},
            {{CurrentPrice, Change24h}}
        )
    
    这个请求只返回你需要的价格和涨跌幅数据,刷新时间通常在5秒以内,完全满足你的需求。

方案2:优化网页抓取(如果不想用API)

如果坚持要抓取网页内容,那就要砍掉所有冗余加载,直接定位目标元素:

  1. 精简请求资源:修改Web.Contents的请求头,告诉服务器不要加载图片、CSS和非必要脚本,减少加载量。示例代码:
    let
        Source = Web.Contents("https://coinmarketcap.com/currencies/bitcoin/", [
            Headers = [
                #"User-Agent" = "Mozilla/5.0",
                #"Accept" = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                #"Accept-Encoding" = "gzip",
                #"Connection" = "keep-alive",
                #"Upgrade-Insecure-Requests" = "1"
            ],
            // 设置超时为60秒,避免无限等待
            Timeout = 60000
        ]),
        // 直接用CSS选择器定位价格元素(注意:网站可能更新CSS类,需要自行核对)
        HtmlDoc = Html.Document(Source),
        PriceElement = HtmlDoc{0}[Descendants][CSS="span.sc-f70bb44c-0.dyKavl.base-text"],
        Price = PriceElement{0}[Text]
    in
        Price
    
  2. 跳过自动提取:不要用Power Query的“从网页获取数据”自动生成步骤,手动写CSS选择器或XPath定位价格节点,避免遍历整个DOM树。

方案3:调整Power Query全局设置

  • 关闭后台冗余刷新:打开Excel选项→数据→查询和连接,取消勾选“允许后台数据刷新”(如果不需要同时刷新多个查询),并设置“刷新频率”为1分钟。
  • 启用缓存机制:在Power Query编辑器中,点击「文件→选项和设置→查询选项→数据加载」,勾选“允许数据预览缓存”,重复刷新时会利用缓存减少请求开销。
  • 精简查询步骤:删除不必要的中间步骤(比如多余的列转换、过滤),只保留提取核心数据的必要操作。

方案4:优化网络和Excel性能

  • 确保网络连接稳定,可尝试更换DNS(比如Cloudflare的1.1.1.1)加快对CoinMarketCap的请求速度。
  • 关闭Excel中无关的插件和工作簿,释放内存,让Power Query有足够资源处理请求。

总结

最推荐用API方案,不仅速度快,而且数据结构稳定,不会因为网站更新布局导致提取失败。如果坚持抓网页,优化请求头和元素定位后,刷新时间也能轻松压到1分钟以内。

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

火山引擎 最新活动