查看: 218|回复: 2|关注: 0

[已解决] Matlab做爬虫出错

[复制链接]

新手

7 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
网上找了段Matlab做爬虫的代码,运行老是报错,不知道问题出在哪

clc,clear;

warning off;


for year = 2018:2019 %年份
    for season = 1:4

        fprintf('%d年%d季度的数据...', year, season)
        [sourcefile, status] = urlread(sprintf('',year,season));
        if ~status
            error('读取出错!\n')
        end

        expr1 = '\d\d\d\d\d\d\d\d'; %获取日期
        [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

        expr2 = '<td>(\d,\d\d\d.\d\d)</td>'; %获取数据

        [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 )'; %重排

        filename = sprintf('%d年',year);
        pathname = [pwd '\data'];

        if ~exist(pathname,'dir')
            mkdir(pathname);
        end

        fullfilepath = [pwd '\data\' filename];
        % 保存数据到Excel
        sheet = sprintf('第%d季度', season);
        xlswrite(fullfilepath, date' , sheet);
        range = sprintf('B1:%s%d',char(double('B')+size(data,2)-1), size(data,1));
        xlswrite(fullfilepath, data, sheet, range);
        fprintf('OK!\n')

    end
end

fprintf('全部完成!\n')



error.JPG

新手

7 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2020-1-6 22:01:50 | 显示全部楼层
因等级限制,无法发链接,代码中的地址是[sourcefile, status] = urlread(sprintf(':)h:)tt:)p://quotes.money.163.com/trade/lsjysj_zhishu_000001.html?year=%d&season=%d',year,season));

论坛优秀回答者

0

主题

527

帖子

100

最佳答案
  • 关注者: 20
发表于 2020-1-6 22:47:55 | 显示全部楼层 |此回复为最佳答案
仅供参考
clc,clear;

warning off;


for year = 2018:2019 %年份
    for season = 1:4

        fprintf('%d年%d季度的数据...', year, season)
        [sourcefile, status] = urlread(sprintf('http://quotes.money.163.com/trade/lsjysj_zhishu_000001.html?year=%d&season=%d',year,season));
        if ~status
            error('读取出错!\n')
        end

        expr1 = '\d\d\d\d\d\d\d\d'; %获取日期
        [datefile, date_tokens]= regexp(sourcefile, expr1, 'match', 'tokens');


        date = cell(size(date_tokens));

        for idx = 1:length(date_tokens)
            date{idx} = date_tokens{1,idx};
        end

        expr2 = '<td>(\d,\d\d\d.\d\d)</td>'; %获取数据

        [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, 4, length(data)/4 )'; %重排

        filename = sprintf('%d年',year);
        pathname = [pwd '\data'];

        if ~exist(pathname,'dir')
            mkdir(pathname);
        end

        fullfilepath = [pwd '\data\' filename];
        % 保存数据到Excel
        sheet = sprintf('第%d季度', season);
        date1=zeros(1,70);
        for j = 1:length(date)
            date1(j) = str2double(cell2mat(date{1,j}));
        end
        
        xlswrite(fullfilepath, date1' , sheet);
        range = sprintf('B1:%s%d',char(double('B')+size(data,2)-1), size(data,1));
        xlswrite(fullfilepath, data, sheet, range);
        fprintf('OK!\n')

    end
end

fprintf('全部完成!\n')
微信图片_20200106224700.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表