使用JAVA爬取网页图片
来源:互联网 发布:网络视频教学平台 编辑:程序博客网 时间:2024/06/06 10:39
经过之前的HttpURLConnection还有各种流的结束,已经可以开始理解怎么下载网页上的一张图片了。
对各种流不理解的话,可以翻翻前面的随笔,讲得都比较详细。在此就不细讲了。
主要流程:
1、HttpURLConnection连接上图片的网址,打开一个InputStream。
2、把InputStream的内容读取到ByteArrayOutputStream中,此时ByteArrayOutputStream存储了图片数据的byte数组。
3、通过文件流,把byte数据填充到一个jpg文件中。
代码非常简单:
String strUrl = "http://ww4.sinaimg.cn/mw1024/005vbOHfgw1eylg2gnnrlj30ia0s87ac.jpg";
//构造URL
URL url = new URL(strUrl);
//构造连接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//这个网站要模拟浏览器才行
conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
//打开连接
conn.connect();
//打开这个网站的输入流
InputStream inStream = conn.getInputStream();
//用这个做中转站 ,把图片数据都放在了这里,再调用toByteArray()即可获得数据的byte数组
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//用这个是很好的,不用一次就把图片读到了文件中
//要是需要把图片用作其他用途呢?所以直接把图片的数据弄成一个变量,十分有用
//相当于操作这个变量就能操作图片了
byte [] buf = new byte[1024];
//为什么是1024?
//1024Byte=1KB,分配1KB的缓存
//这个就是循环读取,是一个临时空间,多大都没关系
//这没有什么大的关系,你就是用999这样的数字也没有问题,就是每次读取的最大字节数。
//byte[]的大小,说明你一次操作最大字节是多少
//虽然读的是9M的文件,其实你的内存只用1M来处理,节省了很多空间.
//当然,设得小,说明I/O操作会比较频繁,I/O操作耗时比较长,
//这多少会有点性能上的影响.这看你是想用空间换时间,还是想用时间换空间了.
//时间慢总比内存溢出程序崩溃强.如果内存足够的话,我会考虑设大点.
int len = 0;
//读取图片数据
while((len=inStream.read(buf))!=-1){
System.out.println(len);
outStream.write(buf,0,len);
}
inStream.close();
outStream.close();
//把图片数据填入文件中
File file = new File("t.jpg");
FileOutputStream op = new FileOutputStream(file);
op.write(outStream.toByteArray());
op.close();
}
效果图:
- 使用JAVA爬取网页图片
- Java爬取网页图片
- 使用Python爬取网页图片
- 爬取网页图片
- 爬取网页图片
- python爬取网页图片
- python爬取网页图片
- Python爬取网页图片
- Python爬取网页图片
- Python 爬取网页图片
- Python 网页爬取图片
- 使用selenium等待网页加载完成,lxml解析网页,利用urllib爬取图片
- 用Java爬取网页
- JAVA爬取网页内容
- JAVA爬取网页内容
- 用python 爬取网页图片
- Python爬取一个网页的图片
- 爬虫爬虫学习: 爬取网页图片
- 分布式系统研发心得
- bzoj 1923: [Sdoi2010]外星千足虫
- 登录错误次数限制springmvc+spring+mybatis五次锁定24小时解锁
- Redis实战总结(二)
- 大并发压测下,redis连接异常Read timed out排查优化
- 使用JAVA爬取网页图片
- [设计模式] 原型模式
- JUnit initializationError(org.junit.runner.manipulation.Filter)错误
- 编译原理--笔记
- 合并果子
- 单例模式
- MongoDB大中华区首席架构师唐建法:关系型数据库到MongoDB的战略迁移
- linux虚拟机安装
- struts1中表单提交乱码解决办法