使用R语言抓取FATF网站嵌套div中受制裁国家列表问题
R爬取FATF制裁国家列表的实现方案
你之前的代码无法获取目标数据核心有两个原因:一是所用的XML包对HTML5标准的嵌套div结构、自定义class属性解析容错性差;二是目标站点的制裁名单从未放在table标签下,而是按监管分类封装在带专属标识的div块中,查找table的思路从一开始就无法匹配到目标内容。
可直接运行的实现代码
推荐换用对现代网页适配更好的rvest包做解析,不用绕弯找table,直接按节点属性定位对应分类的国家列表即可:
# 未安装rvest可先运行下一行安装 # install.packages("rvest") library(rvest) target_url <- "https://www.fatf-gafi.org/countries/" page <- read_html(target_url, encoding = "UTF-8") # 提取高风险黑名单(适用正式制裁措施)的司法管辖区 high_risk_list <- page %>% html_element(xpath = "//div[contains(@class, 'callout') and contains(., 'High-Risk Jurisdictions subject to a Call for Action')]") %>% html_elements(".country-link") %>% html_text2() # 提取强化监控灰名单(适用强化尽调类监管措施)的司法管辖区 monitoring_list <- page %>% html_element(xpath = "//div[contains(@class, 'callout') and contains(., 'Jurisdictions under Increased Monitoring')]") %>% html_elements(".country-link") %>% html_text2() # 整理输出结果 sanction_related <- list( "高风险受制裁辖区" = unique(high_risk_list), "强化监控辖区" = unique(monitoring_list) ) print(sanction_related)
注意事项
- 不需要先用
readLines()拉取源码再传入解析函数,rvest的read_html()内置了基础浏览器请求头和编码自动适配,直接读取静态页面的成功率更高,还能减少冗余代码。 - FATF公布的两类名单对应不同等级的监管限制:高风险黑名单要求成员国对相关辖区主体采取针对性反制制裁措施,灰名单仅要求金融机构执行强化客户尽调流程,你可以根据自己对“制裁措施”的定义筛选对应列表。
- 如果后续网站前端改版导致节点匹配失效,直接在浏览器中打开目标页面按F12调出开发者工具,定位到名单所在的外层div,调整xpath中的class匹配值或者文本关键词即可,不需要再尝试查找table结构。
内容的提问来源于stack exchange,提问作者Kaspro
相关产品推荐
相关产品推荐

