关于Matlab下爬取网络图片问题

本文分享了使用Matlab进行图片爬取的经验,包括遇到的问题及解决方法,并提供了详细的代码示例,展示了如何通过调整参数成功抓取图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因项目需要,需要爬取一些网上的图片,于是在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


使用matlab批量下载网站上的文件-MatlabUrlDownloadToFile.m 前几天美国数学建模成绩出了,我们按照网址下载了自己的证书,另外想看看学校今年的获奖情况,由于学校的参赛队伍数众多,一个一个下载证书再统计显得麻烦,于是想自己用matlab开发一个小程序以实现同类型文件的批量下载。很多网站上有介绍使用Windows API 函数URLDownloadToFile,但是这个在VC上实现容易,要把它移植到matlab上还得使用MEX,有点麻烦了。这几天一直徘徊个大小网站,没有找到相关信息。最后还是自己使用lookfor找到需要的函UrlWrite,调用这个函数轻松搞定批量下载! 以下是代码: %使用matlab下载网站上的文件 %使用urlwrite函数下载网站上的文件 %特别适用于批量下载同类型的文件 % Created by longwen36 2011-4-16 %使用urlwrite实现批量下载 %以下载2011美赛数模证书为例 clc,clear; num = 11701:11710; URLs = cell); folder_filenames = cell); filenames = cell); for idx  = 1:length;     URLs{idx} = sprintf);     filenames{idx} = sprintf); end tic; for idx = 1:length;     fprintf;     [f, status] = urlwrite;     if status == 1;         fprintf;     else         fprintf;     end     end etime = toc; fprintf,etime); 复制代码 下载速度还挺快的,才发现,matlab功能确实很强大,函数很齐全。利用这个函数,加以改进,编写GUI,就可以做个简易的批量下载器了! 感兴趣的同仁可以试试!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值