import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /***
* java抓取网络图片
*
* @author ITWANG
*
*/
public class CatchImage
{ // 地址
private static final String URL = "http://www.4493.com/";
// 编码
private static final String ECODING = "UTF-8";
// 获取img标签正则
private static final String IMGURL_REG = "<img.*src=(.*?)[^>]*?>";
// 获取src路径的正则
private static final String IMGSRC_REG = "http:\"?(.*?)(\"|>|\\s+)"; private static final String IMGDSRC_REG = "[\"\'](http.+\\.(jpg|JPG|png|PNG|gif|GIF))[\"\']";
private static final String[] picstuffix = { "jpg", "JPG", "gif", "GIF", "png", "PNG" }; private static List<String> pList = new ArrayList<>(); public static void main(String[] args) throws Exception
{
CatchImage cm = new CatchImage();
// 获得html文本内容
String HTML = cm.getHTML(URL);
// System.out.println(HTML);
// 获取图片标签
List<String> imgUrl = cm.getImageUrl(HTML);
// 获取图片src地址
List<String> imgSrc = cm.getImageSrc(imgUrl);
// 下载图片
cm.Download(imgSrc, "E:\\Imagesave"+saveDiff()); // cm.getImageSrc(HTML);
// cm.ThreadDownload(imgSrc, "E:\\Imagesave"+saveDiff() , 6);
// cm.TOThreadDownload(pList, "E:\\Imagesave" + saveDiff(), 6, 6000);
} /***
* 获取HTML内容
*
* @param url
* @return
* @throws Exception
*/
private String getHTML(String url) throws Exception
{
URL uri = new URL(url);
URLConnection connection = uri.openConnection();
InputStream in = connection.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
StringBuffer sb = new StringBuffer();
while ((length = in.read(buf, 0, buf.length)) > 0)
{
sb.append(new String(buf, ECODING));
}
in.close();
return sb.toString();
} /***
* 获取ImageUrl地址
*
* @param HTML
* @return
*/
private List<String> getImageUrl(String HTML)
{
Matcher matcher = Pattern.compile(IMGURL_REG).matcher(HTML);
List<String> listImgUrl = new ArrayList<String>();
while (matcher.find())
{
listImgUrl.add(matcher.group());
}
return listImgUrl;
} /***
* 获取ImageSrc地址
*
* @param listImageUrl
* @return
*/
private List<String> getImageSrc(List<String> listImageUrl)
{
List<String> listImgSrc = new ArrayList<String>();
for (String image : listImageUrl)
{
Matcher matcher = Pattern.compile(IMGSRC_REG).matcher(image);
while (matcher.find())
{
listImgSrc.add(matcher.group().substring(0, matcher.group().length() - 1));
}
}
return listImgSrc;
} /**
* 获取html里面的图片
*
* @param html
* @return
*/
private void getImageSrc(String html)
{
Pattern p = Pattern.compile(IMGDSRC_REG);
Matcher m = p.matcher(html);
while (m.find())
{
getpicsrc(m.group(1));
}
} /**
* 截取字符串里面的图片
*
* @param src
* @return
*/
public void getpicsrc(String src)
{
if (src.contains("http:"))
{
String[] app = src.split("http:");
for (int i = 0; i < app.length; i++)
{
if (!isBlank(app[i]))
{
for (int j = 0; j < picstuffix.length; j++)
{
if (app[i].contains("." + picstuffix[j]))
{
int inum = app[i].indexOf(picstuffix[j]);
String url = "http:" + app[i].substring(0, inum) + picstuffix[j];
pList.add(url);
}
}
}
}
}
} /**
* 去处重复元素
*
* @param result
* @return
*/
public static List<String> RemoveRepeated(List<String> result)
{
List<String> tmpArr = new ArrayList<String>();
for (int i = 0; i < result.size(); i++)
{
if (!tmpArr.contains(result.get(i)))
{
tmpArr.add((String) result.get(i));
}
}
return tmpArr;
} /**
* 判断非空
*
* @param cs
* @return
*/
public static boolean isBlank(CharSequence cs)
{
int strLen;
if (cs == null || (strLen = cs.length()) == 0)
{
return true;
}
for (int i = 0; i < strLen; i++)
{
if (Character.isWhitespace(cs.charAt(i)) == false)
{
return false;
}
}
return true;
} /***
* 单线程下载图片
*
* @param listImgSrc
*/
private void Download(List<String> listImgSrc, String savedir)
{
for (String url : listImgSrc)
{
try
{
String imageName = url.substring(url.lastIndexOf("/") + 1, url.length());
URL uri = new URL(url);
InputStream in = uri.openStream();
FileOutputStream fo = new FileOutputStream(new File(savedir + imageName));
byte[] buf = new byte[1024];
int length = 0;
while ((length = in.read(buf, 0, buf.length)) != -1)
{
fo.write(buf, 0, length);
}
in.close();
fo.close();
System.out.println("*^_^*");
} catch (Exception e)
{
System.out.println("-_-!");
}
}
} /**
* 多线程下载图片
*
* @param listImgSrc
* @param savedir
* @param tnum
*/
private void ThreadDownload(List<String> listImgSrc, String savedir, int tnum)
{
for (int i = 0; i < listImgSrc.size(); i += tnum)
{
new DThread(savedir, tnum, listImgSrc, i).start();
}
} /**
*
* 2014-4-3上午10:52:38 Describe: 多线程下载照片
*
* @author: ITWANG
*/
class DThread extends Thread
{ private String savedir = null;
private int tnum;
private List<String> listImgSrc;
private int bunm; public DThread(String savedir, int tnum, List<String> listImgSrc, int bnum)
{
this.savedir = savedir;
this.tnum = tnum;
this.listImgSrc = listImgSrc;
this.bunm = bnum;
} @Override
public void run()
{
for (int i = 0; i < tnum; i++)
{
try
{
String url = listImgSrc.get(bunm + i);
String sps = url.substring(url.lastIndexOf("."), url.length());
String imageName = UUID.randomUUID().toString() + sps;
URL uri = new URL(url);
InputStream in = uri.openStream();
System.out.println(savedir + imageName);
FileOutputStream fo = new FileOutputStream(new File(savedir + imageName));
byte[] buf = new byte[1024];
int length = 0;
while ((length = in.read(buf, 0, buf.length)) != -1)
{
fo.write(buf, 0, length);
}
in.close();
fo.close();
System.out.println("*^_^*");
} catch (Exception e)
{
System.out.println("-_-!");
}
}
}
} /**
* 多线程超时下载
*
* @param listImgSrc
* @param savedir
* @param tnum
* @param timeout
*/
private void TOThreadDownload(List<String> listImgSrc, String savedir, int tnum, int timeout)
{
for (int i = 0; i < listImgSrc.size(); i += tnum)
{
new TODThread(savedir, tnum, listImgSrc, i, timeout).start();
}
} /**
*
* 2014-4-3上午10:52:07 Describe: 超时方式下载照片线程
*
* @author: ITWANG
*/
class TODThread extends Thread
{
private String savedir = null;
private int tnum;
private List<String> listImgSrc;
private int bunm;
private int timeout = 3000; public TODThread(String savedir, int tnum, List<String> listImgSrc, int bnum, int timeout)
{
this.savedir = savedir;
this.tnum = tnum;
this.listImgSrc = listImgSrc;
this.bunm = bnum;
this.timeout = timeout;
} @Override
public void run()
{
for (int i = 0; i < tnum; i++)
{
String url = listImgSrc.get(bunm + i);
String sps = url.substring(url.lastIndexOf("."), url.length());
String imageName = UUID.randomUUID().toString() + sps;
try
{
if (getPic(url, savedir, imageName, timeout))
{
System.out.println("*^_^*");
} else
{
System.out.println("-_-!");
}
} catch (Exception e)
{
System.out.println("下载异常");
}
} }
} /**
* GET方式下载照片
*
* @param purl
* @param folder
* @param filename
* @param timeout
* @return
* @throws Exception
*/
public boolean getPic(String purl, String folder, String filename, int timeout) throws Exception
{
URL url = new URL(purl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(timeout);
conn.setRequestMethod("GET");
conn.setDoOutput(true);
conn.setDoInput(true);
if (conn.getResponseCode() == 200)
{
InputStream is = conn.getInputStream();
byte[] bs = new byte[1024];
int len;
File sf = new File(folder);
if (!sf.exists())
{
sf.mkdirs();
}
OutputStream os = new FileOutputStream(sf.getPath() + "\\" + filename);
while ((len = is.read(bs)) != -1)
{
os.write(bs, 0, len);
}
os.close();
is.close();
return true;
}
return false;
} /**
* 时间文件夹
*
* @return
*/
public static String saveDiff()
{
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
return "\\" + formate.format(System.currentTimeMillis()) + "\\";
} }

  

java 抓取网页图片的更多相关文章

  1. Python3简单爬虫抓取网页图片

    现在网上有很多python2写的爬虫抓取网页图片的实例,但不适用新手(新手都使用python3环境,不兼容python2), 所以我用Python3的语法写了一个简单抓取网页图片的实例,希望能够帮助到 ...

  2. 抓取网页图片的脚本(javascript)

    抓取网页图片的脚本(javascript) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24172223 脚本内容 (没有换行) ...

  3. Java 抓取网页中的内容【持续更新】

    背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...

  4. C语言调用curl库抓取网页图片

    思路是先用curl抓取网页源码,然后以关键字寻找出图片网址.   #include <stdio.h> #include <stdlib.h> #include <str ...

  5. C语言调用curl库抓取网页图片(转)

    思路是先用curl抓取网页源码,然后以关键字寻找出图片网址.  范例: #include <stdio.h> #include <stdlib.h> #include < ...

  6. java抓取网页数据,登录之后抓取数据。

    最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一 ...

  7. Java抓取网页数据(原网页+Javascript返回数据)

    有时候由于种种原因,我们需要采集某个网站的数据,但由于不同网站对数据的显示方式略有不同! 本文就用Java给大家演示如何抓取网站的数据:(1)抓取原网页数据:(2)抓取网页Javascript返回的数 ...

  8. Java抓取网页数据(原来的页面+Javascript返回数据)

    转载请注明出处! 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同 ...

  9. 使用JAVA抓取网页数据

    一.使用 HttpClient 抓取网页数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

随机推荐

  1. About LIS(Longest Increasing Subsequence)

    今天528给讲了基础的DP,其中第一道例题就是最长不下降子序列——LIS. 题目简述:给出N个数,求最长不下降子序列的长度. 数据范围:30% N<=1000 ; 100% N<=1000 ...

  2. 慕课网__CSS_网页图标制作

    参考地址:http://www.flowerboys.cn/font/article/fontsArticle/how-to-turn-your-icons-into-a-web-font.html

  3. nodejs的第三天学习笔记

    一. CommonJS 规范 1.1nodejs 与 commonjs 之间的关系: 1)nodejs是一种服务器语言. a)开启服务的能力 b)文件读写的能力 服务器:就是一台安装了服务软件 2)c ...

  4. redsocks 将socks代理转换成全局代理

    redsocks 需要手动下载编译.前置需求为libevent组件,当然gcc什么的肯定是必须的. 获取源码 git clone https://github.com/darkk/redsocks 安 ...

  5. unity调用摄像头的方法

    http://blog.csdn.net/cocoa_china/article/details/10527995 using UnityEngine; using System.Collection ...

  6. 加速编码的 JavaScript 库和工具

    JavaScript库是 一个提前写好的JavaScript文件库,它可以很容易的开发基于JavaScript的应用,特别是AJAX和一些其它的以web为中心的技术.运用JavaScript最基本的方 ...

  7. jquery trigger 触发事件小计 -- 关于a标签

    jquery -- trigger触发执行事件方法虽然好用,偶尔也会出些小问题. 在最近得一个项目中需要触发a标签的点击事件时,我就遇到了点小问题.我很想当然的写层这样:$("a" ...

  8. DTD的作用

    在介绍DTD的作用之前先介绍一下SGML:SGML SGML(Standard Generalized Markup Language,标准通用标记语言),是一种定义电子文档结构和描述其内容的国际标准 ...

  9. 关于Js OOP编程 创建对象的一些理解。

    面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 对象的含义          对象可以是汽车,人,动物,文字,表单或者任何存在的事物等等. 对象有: 属性----- ...

  10. ABAP面试问题及侧重点

    ABAP面试 1.简单的Report包括哪些东西 2.Dialog 逻辑流以及相应的处理内容 3.用过的几种增强方式:怎么找增强 4.接口和函数的使用,一般遇到自己不会的函数怎么处理 5.关联查询:I ...