从给定网页上下载<img src="" />格式的图片,并保存到制指定路径,适用于小批量的下载图片,大批量的建议还是用爬虫比较好。

作者的思路是:把整个HTML页面都存成字符串,用正则表达式把能与<img src="" />匹配的字符串找出来,掐头去尾找到图片的url,最后用URLConnection与网页建立连接把图片存下来。

小女发现这段代码中的getPicSrc的函数没有用,但为了保持转载的完整性就留了下来。

FROM:http://java.86mh.net/post/2012-04-30/19691910

package grabUrlImg;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 数据采集测试
*
* @author toby
*
*/
public class GrabImg {
/**
* 根据给定的url获取网页信息
*
* @param strUrl
* @return
*/
public String getHtml(String strUrl) {
BufferedReader br = null;
String result = "";
try {
// 初始化url
URL url = new URL(strUrl);
// 转为输入流
InputStreamReader isr = new InputStreamReader(url.openStream(),
"utf-8");
// 转为字符串
br = new BufferedReader(isr);
while (br.readLine() != null) {
result += br.readLine();
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根据给定的网页根据正则获取img地址和扩展名
*
* @param pattern
* @param matcher
* @return
*/
public String getPicSrc(String pattern, String matcher) {
String res = "";
// 初始化正则
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
// 正则匹配
Matcher m = p.matcher(matcher);
// 循环获取匹配字符
while (m.find()) {
// <img src="" />
String img = m.group();
res = img.substring(10, img.length() - 4) + "\t";
res += res.substring(res.lastIndexOf("."));
}
return res;
}
/**
* 给定url,获取图片地址和扩展名,并保存在指定文件夹
*
* @param strUrl
*/
public void getPic(String strUrl) {
// 获取网页
String matcher = getHtml(strUrl);
// 初始正则
String regImg = "<img src=\"\\S+\" />";
// 进行匹配
Pattern p = Pattern.compile(regImg, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(matcher);
String savePath = "d:/grabimg/";
File file = new File(savePath);
// 如果不存在文件夹就创建
if (!file.exists()) {
file.mkdirs();
}
// 循环保存
System.out.println("开始从网页抓取图片,请等待...");
int size = 0;
while (m.find()) {
String imgTag = m.group();
// 路径
String src = imgTag.substring(10, imgTag.length() - 4);
// 扩展名
String ext = src.substring(src.lastIndexOf("."));
// 保存图片
try {
URL url = new URL(src);
URLConnection conn = url.openConnection();
InputStream in = conn.getInputStream();
//BufferedInputStream in = new BufferedInputStream(url.openStream());
String saveName = UUID.randomUUID().toString();
File saveImg = new File(savePath + saveName + ext);
//BufferedOutputStream out = new BufferedOutputStream(
//new FileOutputStream(saveImg));
OutputStream out = new FileOutputStream(saveImg);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
size++;
}
System.out.println("共存储了" + size + "张图片!");
}
public static void main(String[] args) {
GrabImg grab = new GrabImg();
String strUrl = "http://www.csdn.net/"; //输入你想要copy的页面url
grab.getPic(strUrl);
}
}

从给定网页上下载img src= /格式的图片,并保存到制指定路径相关推荐

  1. 禁止用户从网页上下载图片

    禁止用户从网页上下载图片 目前没找到什么好方法 document.oncontextmenu = () => false;//禁止右键 document.oncontextmenu = () = ...

  2. 实现在网页上下载文件

    title: 实现在网页上下载文件 date: 2015-12-28 20:34:19 categories: UtilsClass_Resource tags: Utils xl_echo编辑整理, ...

  3. 从百度网页上下载歌曲,歌曲名称显示乱码

    [DESCRIPTION] 从百度网页上下载歌曲,歌曲名称显示乱码 [SOLUTION] 该问题属于Baidu server返回的Content Disposition中使用GB2312的编码 但并没 ...

  4. [奇怪的小知识]从网页上下载内嵌的PDF、PPT文件(以Google浏览器为例)

    [奇怪的小知识]从网页上下载内嵌的PDF.PPT文件(以Google浏览器为例) 1. 打开谷歌浏览器开发者工具 实操网址 2. 选中Network->Fetch/XHR 3. 刷新网页 刷新网 ...

  5. 如何从网页上下载Flash?

    不知道大家是否遇到过,因为看到某个网页上精美的FLASH而苦于无法下载呢?不像图片之类的可以点右键,然后图片另存为就可以很顺利的保存下来.而在FLASH上点右键却保存不了,很是郁闷.现在就向大家介绍两 ...

  6. 通过超图在网页上加载obj格式3D模型

    先看此文: https://blog.csdn.net/bcbobo21cn/article/details/109140958 在桌面版加载一个obj模型出来: 按目前的理解,只要在桌面版加载了模型 ...

  7. 请问asp.net网页里能显示tiff格式的图片吗?

    我做的存取图片的程序,其它格式的图片都可以显示,可tiff格式的图片总是显示乱码,哪位高手给指点指点是怎么回事?谢谢! 转载于:https://www.cnblogs.com/support/arch ...

  8. 【转】从网页上下载控件时制作CAB包的方法

    Internet 软件分发单位是"软件包",它由包含 .inf 文件或软件分发 (.osd) 文件(或两者都包括)的 CAB 文件 (.cab) 所组成.一个分发单位也可以包含软件 ...

  9. python高清大图代码_python2的代码从吉卜力网页上下载高清图片

    python2 + 修改基础存储路径 + 给map里面添加源url和存储文件夹,k-v对. # -*- coding: utf-8 -*- import re import urllib import ...

最新文章

  1. 解决Debian-7.1下Chrome浏览器字体难看的问题
  2. malloc基本实现
  3. USACO 2.1 健康的好斯坦奶牛 (DFS)
  4. linux启动数据库orl,linux5.4下oracle问题
  5. linux 进程 控制终端,linux系统编程之进程(五):终端、作业控制与守护进程
  6. ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、Server.MapPath的区别...
  7. 单例在多线程中的使用
  8. Oracle基于时间点的恢复(转载)
  9. 2个版本并存的python使用新的版本安装django的方法
  10. DeepFake技术--fakeapp, faceswap, deepfacelab等deepfakes换脸程序的简单对比
  11. iPhone界面学习(2)
  12. iapp如何导入本地源码,iapp导入源码使用教程
  13. linux mtd 命令,Linux MTD介绍
  14. U盘重装Win7系统教程
  15. socat 虚拟串口在 linux OS中如何实现?
  16. 偏态分布的均值与中位数关系
  17. 基尔霍夫电流/电压定律
  18. 互联网+时代的企业应用集成平台
  19. org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception
  20. 如何选择适合的短信通道

热门文章

  1. 2014年CCNU-ACM暑期集训总结
  2. 附视频教程|如何优雅扩容云硬盘
  3. 关于【无人驾驶航空器飞行管理暂行条例】对航模的一些信息讨论汇总
  4. 小白的学习之路--IDEA安装及使用
  5. STM32WB系列调试总结
  6. GF( p^n) 伽罗瓦域
  7. 笔记本电脑,充电器一拔立马关机,突然无法用电池怎么办
  8. 到底什么是大数据?新手学习大数据的路径是什么?
  9. java判断手机访问还是电脑访问
  10. 用HBuilder开发的基于MUI和H5+的APP开发及上架经历