expr1 = '<td align="center">(\w*\.?\w*)</td>'; %要提取的模式,()中为要提取的内容
[stationfile, station_tokens]= regexp(sourcefile, expr1, 'match', 'tokens'); %match返回整个匹配类型,token返回()标记的位置,都为元胞类型
clc;
clear;
warning off;
[data1,str] = xlsread('\需要爬取的车次.xlsx','Sheet1'); %导入表格中需要爬取的车次信息
str=str(:,1);
str=str(2:end); %提取需要查询的车次信息
%% 循环查询各个车次始发站和终点站信息
for train = 1:size(str,1)
str1='抓取';
str2=strtrim(str{train}); %删除字符串制表符
str3='数据中...';
str4=[str1,str2,str3];
fprintf(str4)
partURL1 = 'http://search.huochepiao.com/chaxun/resultc.asp?txtCheci=';
partURL2 = str2;
partURL3 = '&cc.x=0&cc.y=0';
fullURL=[partURL1,partURL2,partURL3];
[sourcefile, status] = urlread(sprintf(fullURL),'Charset','GBK'); %urlread函数可以读取网页
if ~status %判断数据是否全部读取成功
error('出问题了哦,请检查\n')
end
expr1 = '<td align="center">(\w*\.?\w*)</td>'; %要提取的模式,()中为要提取的内容
[stationfile, station_tokens]= regexp(sourcefile, expr1, 'match', 'tokens'); %match返回整个匹配类型,token返回()标记的位置,都为元胞类型
% 如果能抓取到高铁信息
if ~isempty(station_tokens)
station_tokens=station_tokens(1:2); %只截取始发站和终点站数据
station = cell(size(station_tokens)); %创建一个等大的元胞数组
for idx = 1:length(station_tokens)
station{idx} = station_tokens{idx}{1}; %将始发站和终点站数据写入
end
sheet = 'Sheet1'; %工作表名称
left=['B',num2str(train+1)];
right=['C',num2str(train+1)];
range = sprintf([left,':',right]); %从源文件中获取的目标数据的放置范围
xlswrite('\需要爬取的车次.xlsx', station, sheet, range); %将查询到的车次始发站和终点站信息写入表格中
fprintf('完成!\n')
end
end
fprintf('全部完成!数据保存在站次信息表格中,请注意查看!\n')
本文分享自微信公众号 - 优化算法交流地(ROSECW123)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4586362/blog/4413638