JAVA抓取页面图片

package CatchTest;

import java.io.ByteArrayOutputStream;
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.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CatchImage {
// 网页地址
private static final String URL = "http://www.4399.com/";
// 编码
private static final String ECODING = "UTF-8";
// 获取img标签正则
// private static final String IMGURL_REG = "<img.*src=(.*?)[^>]*?>";
private static final String IMGURL_REG = "<img\\b[^>]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic)\\b)[^>]*>";
// 获取src路径的正则
// private static final String IMGSRC_REG = "http:\"?(.*?)(\"|>|\\s+)";

private static final String IMGSRC_REG = "src\\s*=\\s*\"?(.*?)(\"|>|\\s+)";


public static void main(String[] args) throws Exception {
CatchImage cm = new CatchImage();
// 获取页面内容
String HTML = cm.getHTML(URL);
// 获取图片标签
List<String> imgUrl = cm.getImageUrl(HTML);
System.out.println(imgUrl);

// 获取图片src地址
List<String> imgSrc = cm.getImageSrc(imgUrl);
System.out.println(imgSrc);

// FOR (INT I = 0; I < IMGSRC.SIZE(); I++) {
// SYSTEM.OUT.PRINTLN("第" + I + "个图片");
// CM.OUTIMAGE(IMGSRC.GET(I));
// }

}

/**
* 读取文件并且保存到本地指定位置
*
* @throws Exception
*/
private void outImage(String url) throws Exception {
// new 一个URL对象
URL l = new URL(url);
// 打开链接
HttpURLConnection conn = (HttpURLConnection) l.openConnection();
// 设置请求方式
conn.setRequestMethod("GET");
// 超时响应为5秒
conn.setConnectTimeout(5 * 1000);
// 通过输入流获取图片信息
InputStream inputStream = conn.getInputStream();
// 把图片数据转换为二进制数据
byte[] data = readInputStram(inputStream);
// 创建一个文件类用于保存图片
File imageFile = new File("F:/image/"
+ UUID.randomUUID().toString().replace("-", "0")
.substring(0, 6) + ".png");
// 创建文件输出流
FileOutputStream outputStream = new FileOutputStream(imageFile);
// 写入数据
outputStream.write(data);
// 关闭输出流
outputStream.close();

}

/**
* 将读取到的内容写入缓存
*/
public static byte[] readInputStram(InputStream inputStream)
throws Exception {
// 创建一个byte类型的缓冲区
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 创建一个Buffer字符串
byte[] buffer = new byte[1024];
int len = 0;
// 每次读取字符串的长度,如果为-1,代表全部读取完毕
while ((len = inputStream.read(buffer)) != -1) {
// 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outputStream.write(buffer, 0, len);
}
// 关闭输入流
inputStream.close();
// 把outStream里的数据写入内存
return outputStream.toByteArray();
}

/***
* 获取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(5,
matcher.group().length() - 1));
}
}
return listImgSrc;
}

}

猜你喜欢

转载自851220753.iteye.com/blog/2292614
今日推荐