【发布时间】:2022-01-10 19:04:33
【问题描述】:
我一直在使用此函数从 Yahoo! 获取股票价格的价值财务:
html.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").Item(0).innerText
我使用的网站是(例如股票代码 IQ):https://finance.yahoo.com/quote/?p=IQ
但是最近,可能是由于升级,这个类抛出了一个错误。运行 html 变量我发现现在它被重命名为:("Fw(b) Fz(36px) Mb(-4px) D(ib)")。
我这里有全文,我只想知道如何从这个元素中获取ticker的值。
<DIV class="D(ib) Mend(20px)" data-reactid="52">
<FIN-STREAMER class="Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="53" active="" value="4.71" data-trend="none" data-field="regularMarketPrice" data-symbol="IQ" data-test="qsp-price" data-pricehint="4">
4.7100
</FIN-STREAMER>
<FIN-STREAMER class="Fw(500) Pstart(8px) Fz(24px)" data-reactid="54" active="" value="-0.8800001" data-trend="txt" data-field="regularMarketChange" data-symbol="IQ" data-test="qsp-price-change" data-pricehint="4">
<SPAN class=C($negativeColor)>-0.8800</SPAN>
</FIN-STREAMER>
<!-- react-text: 55 -->
<!-- /react-text -->
<FIN-STREAMER class="Fw(500) Pstart(8px) Fz(24px)" data-reactid="56" active="" value="-0.15742399" data-trend="txt" data-field="regularMarketChangePercent" data-symbol="IQ" data-template="({fmt})" data-pricehint="4">
<SPAN class=C($negativeColor)>(-15.74%)</SPAN>
</FIN-STREAMER>
<FIN-STREAMER class=D(n) data-reactid="57" active="true" value="" data-trend="none" data-field="regularMarketTime" data-symbol="IQ" changeev="regularTimeChange">
</FIN-STREAMER>
<FIN-STREAMER class=D(n) data-reactid="58" active="true" value="" data-trend="none" data-field="marketState" data-symbol="IQ" changeev="marketState">
</FIN-STREAMER>
我想得到的值是4.7100。
我使用的是:
html.getElementsByClassName("Fw(b) Fz(36px) Mb(-4px) D(ib)").Item(0).innerText
但这会返回一个空结果。
【问题讨论】:
-
考虑改用
querySelectorAll,并用.字符替换空格,这样类列表中类名的实际顺序不会破坏你的程序。 -
更好的主意:使用其他属性进行选择,例如
querySelectorAll( 'IN-STREAMER[data-symbol="IQ"i][data-test-="qsp-price"i]' )(i部分使其成为不区分大小写的匹配项)。 -
很确定 vba 不支持
i。 -
请注意,该网站专门设计用于更改内容以抵抗抓取。如果您需要财务数据,请从 API 中获取,这样会更容易且不易损坏