我是新手,Matlab
目前正在处理从金融时报网站导出的金融数据。我想知道如何从这个页面获得例如股价预测信息
http://markets.ft.com/research/Markets/Tearsheets/Forecasts?s=DIS:NYQ
High +34.7 % 85.00
Med +15.7 % 73.00
Low -9.6 % 57.00
并将这些信息保存为变量。
我是新手,Matlab
目前正在处理从金融时报网站导出的金融数据。我想知道如何从这个页面获得例如股价预测信息
http://markets.ft.com/research/Markets/Tearsheets/Forecasts?s=DIS:NYQ
High +34.7 % 85.00
Med +15.7 % 73.00
Low -9.6 % 57.00
并将这些信息保存为变量。
urlread
这是一个使用and的简单解决方案regexpi
:
% Create URL string and read in HTML
ftbaseurl = 'http://markets.ft.com/research/Markets/Tearsheets/Forecasts?s=';
ticksym = 'DIS:NYQ';
s = urlread([ftbaseurl ticksym]);
% Create pattern string for regular expression matching
trspan = '<tr><td class="text"><span class="';
tdspan1 = '</span></td><td><span class="\w\w\w color ">'; % \w\w\w matchs pos or neg
matchstr1 = '(?<percent>[\+|\-]*\d+.\d+)'; % percent: match (+or-)(1+ digits).(1+ digits)
tdspan2 = ' %</span></td><td>';
matchstr2 = '(?<price>\d+\.\d\d)</td></tr>'; % price: match (1+ digits) . 2 digits
pat = [trspan 'high">High' tdspan1 matchstr1 tdspan2 matchstr2 '|' ...
trspan 'med">Med' tdspan1 matchstr1 tdspan2 matchstr2 '|' ...
trspan 'low">Low' tdspan1 matchstr1 tdspan2 matchstr2];
% Match patterns in HTML, case insensitive, put results in struct array
forecasts = regexpi(s,pat,'names');
结果是一个 1×3结构数组,其中每个元素都有两个字段,'percent'
并且'price'
,每个都包含由正则表达式解析器提取的字符串。例如
>> forecasts(3)
ans = percent: '-10.3'
price: '57.00'
>> str2double(forecasts(3).percent)
-10.3000
我会留给您将字符串转换为数字(请注意,财务软件通常以整数美分(或最低面额)而不是浮点美元来存储价格以避免数字问题)并将其转换为一般功能。这是有关Matlab 中正则表达式的更多信息。
我上面的评论仍然有效。这是非常低效的。您正在下载整个网页的 HTML 并对其进行解析,以便找到一些小数据。如果它不经常更新或者您不需要它非常快,这很好。而且,这个方案很脆弱。如果金融时报更新他们的网站,它可能会破坏代码。而且,如果您尝试经常下载他们的常规网页,他们也可能会阻止您。