如何爬取雅虎财经奥斯陆交易所股票价格并导入Google Sheets
原可正常抓取美股标的的公式:
=REGEXEXTRACT(INDEX(IMPORTXML("https://finance.yahoo.com/quote/CVNA?p=CVNA";"//*[@id='quote-header-info']");;3); "\d+.\d+|\d+")+0
报错根因
原公式依赖固定索引提取quote-header-info节点下的第3段内容,雅虎财经对非美股标的的页面DOM节点排布有差异,奥斯陆交易所的NEL.OL对应页面的股价所在节点位置发生了变化,导致正则匹配不到有效数值触发报错。
可行解决方案
方案1:使用精准通用XPath(兼容所有雅虎财经标的,推荐)
直接抓取股价专属属性节点,不需要索引定位和正则提取,稳定性远高于原写法:
- 若你使用的Google Sheets版本采用分号作为函数参数分隔符(欧洲区域常用),公式如下:
=VALUE(IMPORTXML("https://finance.yahoo.com/quote/NEL.OL?p=NEL.OL"; "//*[@data-testid='qsp-price']/@data-value")) - 若使用逗号作为参数分隔符,公式如下:
=VALUE(IMPORTXML("https://finance.yahoo.com/quote/NEL.OL?p=NEL.OL", "//*[@data-testid='qsp-price']/@data-value"))
该写法也兼容CVNA等美股标的,替换URL中的股票代码即可通用。
方案2:使用原生GOOGLEFINANCE函数(最稳定)
Google Sheets自带的金融数据接口原生支持奥斯陆交易所标的,不需要爬取第三方页面,不会因为页面结构更新失效,直接输入公式即可返回实时股价:=GOOGLEFINANCE("NEL.OL")
方案3:适配原有逻辑的调整方式
如果要保留原有的正则+INDEX的写法逻辑,可先单独运行=IMPORTXML("https://finance.yahoo.com/quote/NEL.OL?p=NEL.OL";"//*[@id='quote-header-info']")查看返回的数组内容,找到包含股价的数组序号,替换原公式中INDEX的第3位索引值即可。
内容的提问来源于stack exchange,提问作者FredNors
相关产品推荐
相关产品推荐

