因项目需要,需要爬取一些网上的图片,于是在Matlab下试了一下urlread、urlwrite和websave等,均没能成功爬取一张图片。当然,有些错误为一些网站拒绝被爬取,但是用Python轻松爬取,不知是否因为Matlab在这方面还不太成熟还是为何。后来,仔细查看urlwrite相关说明,设置了一些相关参数,爬取成功。其中按照注释的urlwrite则无法爬取成功。代码如下:
clc
clear
s=urlread('http://blog.youkuaiyun.com/u011501388/article/details/78351305');
pat='http://[^" \n=]*.jpg';
expr= regexp(s, pat, 'match');
fid=fopen('E:\images.txt','a');
fprintf(fid,'\n%s\r\n',expr{:});
fclose(fid);
data=importdata('E:\images.txt');
for i=1:length(data)
a=data{i};
% s=urlwrite(a,sprintf('%d.jpg',i));
% s=urlwrite(a,a);
try
% options = weboptions('Timeout',Inf,'RequestMethod','post');
% s=websave(a,a,'term','simulink','duration',7,options);
s=urlwrite(a,sprintf('%d.jpg',i), 'UserAgent','MATLAB R2015b','Timeout',100,'Get',{'term','urlread'});
catch ME
continue
end
I=imread(s);
imwrite(I,strcat('E:\images\',int2str(i),'.jpg'));
end
其中网址为本人的blog网址,images.txt结果如下:
爬取的结果图片在images文件夹下,如图所示:
从结果可以看到,有些图片没能成功抓取。
现在把网址换成如下,可以爬取二次元图片:
https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gbk&word=%B6%FE%B4%CE%D4%AA&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111
爬取结果如下:
参考:
1. websave
2. urlwrite with http authentication
3.urlwrite
4. urlread