加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]用matlab抓取股票数据

(2018-02-16 12:46:48)
标签:

转载

最近搞论文需要所有股票的日数据,懒得到实验室数据库中一个个去筛了,正巧前一阵看了一点matlab简单爬虫和写数据进数据库的东西,遂想何不从网上把数据爬下来,反正日数据还是蛮好搜的。

整段代码主要参考了http://www.design-ask.com/00132/132561.html,在此基础上稍作修改,可以把上证a股的数据导入的mysql数据库中,具体如下:


clc,clear;
warning off;

% 连接数据库
conn = database('test','root','root','com.mysql.jdbc.Driver','jdbc:mysql://localhost:3306/test')
% 年份
year = 2010;
% stockcode = '000001';
fors = 600000:602000 %股票代码
stockcode = num2str(s);

for jidu = 1:4
fprintf([stockcode,'股票%d年%d季度的数据...'], year, jidu)
% 读取大盘指数
% [sourcefile, status] = urlread(sprintf(['http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/',stockcode,...
%      '/type/S.phtml?year=%d&jidu=%d'], year,jidu));  
% 读取个股数据
[sourcefile, status] = urlread(sprintf(['http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/',stockcode,...
'/.phtml?year=%d&jidu=%d'], year,jidu));
if ~status
error('读取出错!n')
end
expr1 = 's+(dddd-dd-dd)s*'; %获取日期
[datefile, date_tokens]= regexp(sourcefile, expr1, 'match', 'tokens');
date = cell(size(date_tokens));
for idx = 1:length(date_tokens)
date{idx} = date_tokens{idx}{1};
end

if isempty(date) %如果没有抓取到日期,说明该股不存在或是在那一时间段没有上市交易
fprintf('该股票不存在或没有交易.n')
continue
else

expr2 = '<div align="center">(d*.?d*)</div>'; %获取交易数据
[datafile, data_tokens] = regexp(sourcefile, expr2, 'match', 'tokens');
data = zeros(size(data_tokens));
for idx = 1:length(data_tokens)
data(idx) = str2double(data_tokens{idx}{1});
end
% 数据重排,各列分别为开盘价、最高价、收盘价、最低价、交易量、交易金额
data = reshape(data, 6, length(data)/6 )';

% 在数据库中建表
a = exec(conn,...
['create table sh',stockcode,' (date char(100), open float, high float, close float,low float, vol float, amount float)']);
% 将抓取到的数据写入数据库
for j = 1:size(data,1)
exdata(1,1) = date(size(data,1)+1-j);
for i = 1:6
exdata(1,i+1) = {data(size(data,1)+1-j,i)};
end
fastinsert(conn, ['sh',stockcode], {'date';'open';'high';'close';'low';'vol';'amount'}, exdata)
end

fprintf('OK!n')
end
end
end

新浪财经的数据用正则表达式就能比较轻松的抓取,不过如果碰上比较乱的网页或是需要抓取汉字,matlab就不咋好使了。有时间学习下用python写爬虫吧。

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有