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;
}
}
分享到:
相关推荐
### Java抓取网页图片链接地址 #### 知识点概览 本文将详细介绍如何使用Java编程语言抓取网页上的图片链接。此技术广泛应用于网络爬虫、数据分析等领域,能够帮助开发者快速获取所需的图像资源。 #### 技术背景与...
在本文中,我们将深入探讨如何使用Java编程语言和Spring Boot框架来实现百度图片的抓取与下载功能。首先,我们需要了解几个关键的概念和技术。 **Java** 是一种广泛使用的面向对象的编程语言,它以其跨平台的特性而...
Java爬虫技术是一种利用编程语言(本例中是Java)自动化地从互联网上...通过以上知识点的学习和实践,你可以构建一个基本的Java图片爬虫,实现从网页中抓取并下载图片的功能。记住,持续学习和实践是提升技能的关键。
Java爬虫技术是一种用于自动化网页数据抓取的编程方法,尤其在处理图片抓取时,它可以帮助我们批量下载网络上的图像资源。对于新手来说,掌握Java爬虫抓取图片的基本步骤和技巧是十分有益的。 首先,我们需要了解...
java的封装类,可以从指定网络地址,抓取地址中的网页,并分析抓取图片地址,下载到本地
在Java编程中,抓取网页图片是一项常见的任务,特别是在数据抓取、网页分析或爬虫项目中。本文将详细介绍如何利用Java和正则表达式来抓取网页中的图片链接,并下载这些图片。以下是一个简单的Java程序示例,用于实现...
在本场景中,我们将重点讨论如何利用Java编写爬虫来抓取网页内容并下载其中的图片。 首先,我们需要了解网络爬虫的基本原理。网络爬虫通过发送HTTP请求到目标网站,获取返回的HTML文档,然后解析这个文档以提取出...
多线程允许程序同时执行多个任务,这在处理大量I/O密集型任务,如网络请求和文件读写时特别有用,例如爬虫抓取网页图片。 在Java爬虫中,多线程主要应用于以下几个方面: 1. **并发下载**:每个线程负责下载一个或...
### Java获取网页中图片的方法与判断网页代码中是否包含有效图片 在当今互联网时代,从网页中抓取图片是常见的需求之一,特别是在数据抓取、网络爬虫或内容分析等应用中。Java作为一种广泛使用的编程语言,提供了...
“java抓取图片”则强调了实现这一功能所采用的编程语言,即Java,这是一种广泛应用的、面向对象的编程语言,具有跨平台性和丰富的库支持,适合开发网络爬虫程序。 【详细知识点】: 1. **网络爬虫技术**:网络...
在本项目中,我们主要探讨的是使用Java编程语言开发的一款网络爬虫,其目标是爬取特定网站——“校花网”上的所有美女图片。同时,项目还包含了一个基于Swing的简单游戏——贪吃蛇,增加了趣味性。以下是关于Java...
该程序是一个基于Java SE开发的简单网站图片抓取工具,主要展示了如何利用Java进行网络请求和数据解析,特别适用于初学者了解和学习Java网络编程。在这个项目中,开发者并未依赖任何特定的框架,而是直接使用Java的...
在Java编程环境中,生成网页快照是一项常见的需求,主要用于数据抓取、网页存档或测试自动化等场景。这里我们关注的焦点是如何利用Java实现整张网页的快照功能。通过标题"java 实现整张网页快照"和描述,我们可以...
描述中的“网页图片抓取器,网页图片抓取工具,网页图片抓取”进一步强调了这个工具的主要功能,即从网页上抓取图片。这可能包括对整个网站的图片进行扫描,或者根据用户设定的关键词、URL列表等条件进行筛选下载。...
响应式布局爬虫技术是现代Web开发中一个重要的实践领域,尤其在Java环境下,通过爬虫获取网页数据并实现响应式布局,可以有效地处理不同设备和屏幕尺寸下的内容展示。以下将详细介绍Java网络爬虫的基本原理,响应式...
在本项目中,我们主要探讨的是如何使用Java编程语言来实现对百度、Google以及Bing这三个主流搜索引擎的图片抓取功能。这个项目名为"ImageCrawler",它可能是一个简单的命令行工具,用于批量下载指定关键词的网络图片...
本Java新闻抓取程序代码通过 URL 和 URLConnection 实现了网页内容的获取,利用正则表达式解析 HTML,同时处理了图片的下载和替换。此外,还引入了日志记录机制来增强程序的可维护性和调试性。这种技术方案可以广泛...
总结来说,生成网页jpg图片涉及网络请求、HTML解析、页面渲染以及图像转换等多个步骤。使用Java结合其他工具库,我们可以构建出一个跨平台且适应不同环境的解决方案。在实际应用中,还应考虑性能优化、错误处理和...
Java识别PDF图片中的文字是一项常见的任务,特别是在文档处理和数据提取领域。Tess4J是一个强大的工具,它基于Tesseract OCR(光学字符识别)引擎,能够帮助开发者在Java应用程序中实现这一功能。以下是对这个主题的...
Java网页抓取是一个常见的任务,用于从网页上提取结构化数据,例如HTML文档中的文本、链接、图片等信息。在Java领域,Jsoup是一个非常流行的库,它提供了强大的功能来解析、操纵和提取HTML内容。Jsoup包全指的是包含...