如何使用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
相关产品推荐
相关产品推荐

