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

如何使用SAS的PROC HTTP获取HTML动态生成的值

使用SAS PROC HTTP获取动态更新的比特币价格

我来帮你搞定用SAS的PROC HTTP抓取CoinDesk上的比特币价格这件事!下面是具体的步骤和代码,亲测可行:

1. 先获取网页的静态源代码

首先用PROC HTTP发送GET请求,把目标页面的源代码存到临时文件里:

filename webresp temp; /* 定义临时文件存储网页响应内容 */
proc http
    url="https://www.coindesk.com/price/"
    method="GET"
    out=webresp
    encoding="utf-8"; /* 指定编码避免乱码 */
run;

2. 从源代码中提取目标价格

你已经定位到价格所在的元素是id="cdbpidata"下的<span class="data">标签,我们用正则表达式来精准提取这个价格:

data bitcoin_price;
    infile webresp lrecl=32767; /* 读取临时文件,设置足够长的行宽 */
    input line $32767.;
    
    /* 正则匹配规则:定位到cdbpidata元素,然后抓取价格部分 */
    if prxmatch('/<div id="cdbpidata".*?<span class="data"><span class="symbol">\$<\/span>([\d,]+?\.\d{2})<\/span>/', line) then do;
        /* 提取带逗号的价格字符串 */
        price_str = prxposn(prxparse('/<div id="cdbpidata".*?<span class="data"><span class="symbol">\$<\/span>([\d,]+?\.\d{2})<\/span>/'), 1, line);
        /* 去掉逗号并转换为数值型 */
        price = input(compress(price_str, ','), best32.);
        output;
    end;
run;

/* 打印提取结果 */
proc print data=bitcoin_price noobs;
    var price_str price;
    title "当前比特币价格";
run;

3. 重要提示

  • 页面结构变化风险:如果CoinDesk修改了网页的HTML结构,这个正则表达式就会失效,到时候需要重新打开开发者工具定位新的元素路径。
  • 动态内容的特殊情况:如果之后价格变成完全由JavaScript动态加载(静态源码里找不到),那PROC HTTP就不够用了,得配合无头浏览器工具来抓取渲染后的页面,但目前你找到的元素在静态源码里存在,所以上面的方法完全可行。
  • 编码问题:如果出现乱码,确保PROC HTTP里的encoding参数和页面实际编码一致,一般用utf-8就没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:53:56