1. 首页 > 外汇

外汇牌价今日最新中国银行(案例实操:爬取中行外汇即时牌价)

案例背景

这次是一个简单的小案例。

在创建Power BI 报告时,经常有相关数据转换需要用到即时的汇率,另外,有些时候汇率换算需要用最新的汇率折算。这就需要能用到银行网站上公布的即时汇率。我们知道中国银行官网会公布即时的汇率,目前只公布43种外汇的牌价,如下图所示。

外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图1)

我们希望能获取到最新的汇率,并随时引用且可以自动更新我们的系统报告。其次,获取实时汇率数据后,也可以在Excel中或者BI 建模中建立报告,制作图表等,帮助你更好理解汇率趋势和影响,从而做出更明智的决策。如果你在国际贸易、投资或跨境业务中工作,了解实时汇率变动可以帮助你更好地管理风险。你可以及时调整策略,以应对汇率波动可能带来的影响。你也可以配置 Power Query 脚本,使其能够获取多个货币对的汇率数据,以满足不同货币之间的需求。

简单举例,实操中会计需要用人民币购买美元对外支付供应商货款的情形,那么我们需要关注美元的现汇卖出价的走势及波动情况。下面我们将具体解释如何通过Power Query爬取中国银行网站上公布的实时汇率。

外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图2)

分析问题

我们看该网页一共公布最新的10个时段的43种货币的汇率,网址对应的页码有一定的规律,例如第9页,网址后缀为 index_8.html,第2页,则为index_1.html

外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图3)

稍有不同的是第1页,后缀是index.html

外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图4)

我们的目的是需要按多个页码获取每个页面上的汇率表

解决思路

我们知道Power query有四个Web相关的函数,用来获取网页相关的信息,依次为Web.Contents、Web.Page、Web.Headers、WebAction.Request。Power Query 中的 Web 函数为从网页中获取和处理数据提供了便利的工具,但在使用时需要考虑到网页结构变化、性能、安全性和错误处理等方面的问题。本案例中我们主要用到其中两个Web.Contents、Web.Page。我们来看函数的语法结构Web.Page(url as text,options as record)

url: 指定要获取内容的网页的 URL

options: 指定请求的选项,可以包括诸如 Headers(请求头)、Query(查询参数)等

Web.Contents(url as text, optional options as nullable record)

url: 指定要获取内容的网页的 URL

options: 可选参数,允许你指定额外的选项,如请求头、身份验证等

对于多页面获取,我们考虑把页码定义为一个变量,这样变量结合上述Web类函数即可获得多个页面。

关键步骤

定义一个匿名函数(n as text) as table =>

let

Source = Web.Page(Web.Contents("https://www.boc.cn/sourcedb/whpj/index" & n & ".html")),

Data0 = Source{0}[Data]

in

Data0

输入方式如下表所示。可以直接创建空查询,通过创建函数,输入,如下图外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图5)在函数栏里输入自定义函数外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图6)

让我们来解释一下每部分的含义:

(n as text) as table =>: 这是一个匿名函数的定义。括号内的 (n as text) 表示函数接受一个名为 n 的参数,这个参数的数据类型是文本。而 as table 表示这个函数会返回一个表格类型的结果。let: 这个关键词引导一个 let 表达式块,在这个块中你可以定义一系列变量和步骤。Source=Web.Page(Web.Contents("https://www.boc.cn/sourcedb/whpj/index" & n & ".html")),: 这一行创建了一个名为 Source 的变量,它的值是通过 Web.Contents 函数获取指定 URL("https://www.boc.cn/sourcedb/whpj/index" & n & ".html")的内容,并使用 Web.Page 函数将其转换成网页数据。Data0 = Source{0}[Data]: 这一行创建了一个名为 Data0 的变量,它的值是从 Source 变量中获取第一个数据项(通常是整个网页内容)的内容。Source{0} 表示获取索引为 0 的数据项,而 [Data] 表示从该数据项中获取 Data 字段的内容。in: 这个关键词用于标记 let 表达式块的结束,表示函数的主体部分即将开始。Data0: 在 in 后,返回了变量 Data0 的内容,作为这个匿名函数的结果。创建一个带有页码的List,作为变量n外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图7)

通过一些列简单的转换,转成如下格式.这样即可 凑成网页后缀 "Index_n”的形式

外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图8)启用第一步定义的匿名函数,即可获得对应的网页表单。外汇牌价今日最新中国银行(Power Query 案例实操:爬取中行外汇即时牌价)(图9)经过一系列常规简单变换就可以得到我们需要的内容。最后在查询属性中设置刷新频率即可实现自动刷新。Power Query Web 函数从网页提取数据有一定的局限性,但在使用时需要考虑到网页结构变化、性能、安全性和错误处理等方面的问题:

网页结构变化:如果网页的结构发生变化,例如标签名称或层次结构更改,你的 Power Query 脚本可能需要进行调整。这可能需要花费额外的时间来维护脚本。

网页加载时间:从网页中提取数据可能需要一些时间,特别是当网页内容较大或网络连接较慢时。这可能会影响整体性能。

数据隐私和安全性:如果你从公共网页上提取数据,数据的隐私和安全性可能不是问题。然而,如果你从需要身份验证的网页提取数据,你可能需要处理身份验证等问题。

错误处理:当与外部网页交互时,可能会发生网络错误、超时等问题。你需要在 Power Query 脚本中考虑如何处理这些问题。

本文链接:http://hainhha.cn/wh/3920.html

版权声明:本文内容由互联网用户自行发布,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系qq:1442716096举报,一经查实,本站将立刻删除。

联系我们

在线咨询:点击这里给我发消息

微信号:weixin888

工作日:9:30-18:30,节假日休息