从金融时报出口的数据

时间:2013-06-03 09:07:05

标签: matlab web-scraping export financial

我是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

并将此信息保存为变量。

1 个答案:

答案 0 :(得分:0)

以下是使用urlreadregexpi的简单解决方案:

% 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 struct array,其中每个元素都有两个字段'percent''price',每个字段都包含由正则表达式解析器提取的字符串。例如

>> forecasts(3)

ans = percent: '-10.3'
        price: '57.00'

>> str2double(forecasts(3).percent)

-10.3000

我会留给你把字符串转换为数字(请注意,财务软件通常以整数美分(或最低面额)存储价格而不是浮动点数to avoid numerical issues)并转向这成为一般功能。这是Matlab中的一些more information on regular expressions

我上面的评论仍然有效。这是非常低效的。您正在下载整个网页HTML并对其进行解析,以便找到一些小数据。如果这不经常更新或者你不需要它非常快,那么这很好。此外,这个计划是脆弱的。如果英国“金融时报”更新其网站,可能会破坏代码。如果你经常尝试下载他们的常规网页,他们也可能会阻止你。