如何从非表格结构的Euronext网站提取营收数据至Excel?
用VBA提取Euronext网站非表格形式的营收数据方案
目标网站的内容是通过JavaScript动态渲染的,Excel内置的「获取数据」只能抓取原始HTML源码,因此无法识别到渲染后的营收数据。结合你熟悉VBA的情况,提供两种可行的解决思路:
思路一:使用IE浏览器控件(易上手,适合新手)
通过VBA调用IE浏览器加载页面,等待动态内容渲染完成后,直接定位目标元素提取数据:
步骤1:添加引用
打开VBA编辑器(Alt+F11),依次点击「工具」→「引用」,勾选:
- Microsoft Internet Controls
- Microsoft HTML Object Library
步骤2:示例代码
Sub ExtractEuronextRevenue() Dim ie As InternetExplorer Dim doc As HTMLDocument Dim targetElement As Object '初始化IE对象 Set ie = New InternetExplorer ie.Visible = True '设为False可后台运行 ie.Navigate "https://live.euronext.com/fr/product/equities/FR0014005AC9-XPAR/company-information" '等待页面完全加载(包括JS渲染) Do While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE DoEvents Loop '获取页面文档对象 Set doc = ie.Document '定位目标营收元素(需自行替换为实际选择器) '方法:打开网页按F12,右键选中红色标注的营收数据→「检查」,查看元素的class/id或XPath '示例:假设营收数据在class为"financial-value revenue"的元素中 Set targetElement = doc.querySelector(".financial-value.revenue") '将数据写入Excel If Not targetElement Is Nothing Then Sheet1.Range("A1").Value = "年度营收" Sheet1.Range("B1").Value = targetElement.innerText Else MsgBox "未找到目标数据,请检查元素选择器是否正确" End If '清理资源 ie.Quit Set ie = Nothing Set doc = Nothing End Sub
关键说明
元素选择器需要自己确认:用浏览器开发者工具找到目标数据对应的HTML元素,优先用class或id定位,也可以用getElementsByClassName、getElementById等方法。
思路二:直接调用网站API(高效,无浏览器窗口)
动态网站的核心数据通常通过API接口加载,直接抓API比模拟浏览器更高效:
步骤1:找到API接口
- 打开目标网页,按F12打开开发者工具→切换到「网络」面板
- 刷新页面,筛选「XHR/Fetch」类型的请求
- 搜索关键词(如
revenue、financial),找到返回营收数据的API请求,复制其URL和请求头
步骤2:示例代码(需配合VBA-JSON库解析数据)
Sub GetRevenueFromAPI() Dim xhr As Object Dim jsonResponse As String Dim jsonObj As Object '初始化XMLHTTP对象 Set xhr = CreateObject("MSXML2.XMLHTTP.6.0") '替换为你找到的API地址 xhr.Open "GET", "https://api.euronext.com/your-target-api-url", False '添加请求头模拟浏览器(避免被反爬) xhr.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" '发送请求 xhr.Send '处理响应 If xhr.Status = 200 Then jsonResponse = xhr.responseText '用VBA-JSON库解析JSON(需先导入库) Set jsonObj = JsonConverter.ParseJson(jsonResponse) '根据JSON结构提取营收数据(需自行调整路径) Sheet1.Range("A1").Value = "年度营收" Sheet1.Range("B1").Value = jsonObj("data")("financials")("revenue") Else MsgBox "API请求失败,状态码:" & xhr.Status End If '清理资源 Set xhr = Nothing Set jsonObj = Nothing End Sub
关键说明
- 需先导入VBA-JSON库:下载库文件后,在VBA编辑器中导入模块
- 部分API可能需要携带认证参数(如Cookie),如果请求失败,可复制浏览器的请求头信息补充到代码中
注意事项
- 网站的HTML结构或API接口可能会更新,若代码失效,需重新定位元素或查找新的API
- 频繁请求可能触发反爬机制,建议添加适当的延迟(
Application.Wait Now + TimeValue("00:00:02"))
内容的提问来源于stack exchange,提问作者Iñaki Vignal
相关产品推荐
相关产品推荐

