[align=left]
package com.lee.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Lee
* 本来有很多想完善呢 其他的好像都是功夫问题了
*
*/
public class GetImagesFromWeb {
// 默认图片大小至少为1k
private static long size = 1 ;
// 默认图片存放位置
private static File folder = null ;
// 默认文件扩展名
private static List<String> exts= new ArrayList<String>() ;
// 是否从一个网页上抓取
private static boolean isSingle = true ;
// 文件计数器
private static long counter = 0 ;
// 文件名前缀
private static String fileNameSuffix = "default_filename_suffix_" ;
static{
String path = "C:\\Documents and Settings\\Administrator\\桌面\\MyImagesFolder" ;
folder = new File(path) ;
if(!folder.exists()){
folder.mkdir() ;
}
exts.add("jpeg");
exts.add("jpg") ;
exts.add("gif") ;
}
private static String getExtName(String url){
return url.substring(url.lastIndexOf(".")+1) ;
}
private static List<String> getImageUrls(String url){
URL u = null;
boolean flag = false ;
try {
u = new URL(url);
} catch (MalformedURLException e) {
System.out.println(url+" 不合法!");
flag = true ;
}
if(flag) return null;
List<String> urls = new ArrayList<String>() ;
URLConnection connection = null;
try {
connection = u.openConnection();
} catch (IOException e) {
System.out.println("网络连接错误!");
flag =true ;
}
if(flag) return null;
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
} catch (IOException e) {
System.out.println("IO设备错误");
flag =true ;
}
if(flag) return null;
String line = null ;
try {
while((line = br.readLine() ) != null ){
while(line.contains("<img")){
int imgIndex = line.indexOf("<img") ;
int first = line.indexOf("\"", imgIndex) ;
if(first == -1 ) continue ;
int second = line.indexOf("\"", first+1);
if(second == -1 ) continue ;
String t = line.substring(first+1,second) ;
// url 中可能传递参数
if(t.indexOf('?') > -1)
t = t.substring(0, t.indexOf('?')) ;
urls.add(t) ;
line = line.substring(second) ;
}
}
} catch (IOException e) {
System.out.println("流读写错误");
flag = true ;
}
return urls ;
}
public static void getImagesFromSinglePage(String url) {
URL u = null;;
InputStream is = null ;
FileOutputStream fos = null ;
List<String> urls = getImageUrls(url) ;
if(urls.size() < 1 ) return ;
boolean flag = false ;
for(String ur : urls ){
flag = false ;
try {
u = new URL(ur) ;
} catch (MalformedURLException e) {
System.out.println(ur+ "不合法!");
flag = true ;
}
if(flag) continue ;
URLConnection connection = null;
try {
connection = u.openConnection();
} catch (IOException e) {
System.out.println("IO 错误!");
flag =true ;
}
if(flag) continue ;
try {
is = connection.getInputStream() ;
} catch (IOException e) {
System.out.println("IO 错误!");
flag = true ;
}
if(flag) continue ;
File file = new File(folder,fileNameSuffix+( counter++)+"."+getExtName(ur)) ;
if(!file.exists())
try {
file.createNewFile() ;
} catch (IOException e) {
System.out.println("建立文件"+file.getAbsolutePath()+" 失败!");
flag = true ;
}
if(flag) continue ;
try {
fos = new FileOutputStream(file) ;
} catch (FileNotFoundException e) {
System.out.println("文件 "+file.getAbsolutePath()+"不存在!");
flag =true ;
}
if(flag) continue ;
byte[] b = new byte[1024] ;
int len = 0 ;
try {
while((len = is.read(b, 0, 1024)) > 0 ){
fos.write(b, 0, len) ;
}
fos.flush() ;
} catch (IOException e) {
System.out.println("IO错误!");
}
System.out.println(file.getName()+" 获取成功!");
}
try {
if(fos != null ){
fos.close() ;
fos =null ;
}
if(is != null ){
is.close() ;
is =null ;
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void batchGetImages(String urlFirst,String urlLast,int beginIndex , int endIndex){
for(int i = beginIndex ; i <= endIndex ; i++ ){
getImagesFromSinglePage(urlFirst+i+urlLast) ;
}
}
public static void main(String[] args) {
// 获取一个网页的所有图片
//getImagesFromSinglePage("http://www.qiushibaike.com/new2/pic/20/page/6/") ;
// 获取地址有数字特征规律的所有网页的图片
// 以网址 http://www.qiushibaike.com/new2/pic/20/page/350/ 为例
// 数字350 代表第350页 如果是1则代表的是第一页
// 下面获取第一页到第三十页的所有图片
// 大概获取600 张图片
batchGetImages("http://www.qiushibaike.com/new2/pic/20/page/","/", 1, 30) ;
}
}
[/align]
分享到:
相关推荐
2. 使用URL和URLConnection进行HTTP通信,获取网页内容。 3. HTML解析,可能需要借助第三方库如Jsoup。 4. 显示HTML内容,可以使用JEditorPane或JavaFX的WebView。 5. 实现前进/后退功能,需要维护浏览历史记录。 6....
二维码技术在现代生活中广泛应用,无论是商品追溯、网页跳转还是支付凭证,都能看到它的身影。在IT行业中,理解和掌握二维码的生成与扫描是一项基础技能。本文将基于ZXing(Zebra Crossing)开源库,深入讲解如何在...
在Web应用中,二维码(Quick Response Code,简称QR码)是一种二维条形码,可以存储大量的文本信息,如网址、联系信息、文本、图片等,并能被智能手机等设备快速读取。在Java Web开发中,JSP(JavaServer Pages)...
- 然后,将logo添加到二维码图片上: ```java private void generateQRCodeWithLogo(String content, String filePath, String logoPath) { // 生成二维码图片 BufferedImage qrImage = ...
2004年中国软件技术大会上关于IoC微容器(即Jdon框架的实现原理)的讨论强调了跨J2SE/WEB/EJB微容器的重要性,以保护业务核心组件并延长其生命周期,而不是依赖于特定的J2SE/J2EE版本。 ### JSP内置对象详解 JSP...
在Java编程中,生成和解析二维码是一项常见的任务,特别是在移动应用、数据交换或者网页中。为了实现这个功能,开发者通常需要引入特定的库或jar包。在这个场景中,"java编程二维码要用的jar包"指的是那些支持二维码...
5. 显示或保存二维码:将位图图像显示在界面上,或者保存为图片文件,例如PNG或JPEG格式。 四、ZXing API详解 - com.google.zxing.qrcode.QRCodeWriter:主要负责生成QR码,提供encode方法。 - ...
在实际应用中,还可以结合前端展示,将生成的二维码图片发送给浏览器,从而实现网页上的动态生成和显示。 总之,Java中的二维码编码主要依赖于ZXing库,通过创建`BitMatrix`、编码信息和转换图像来完成。了解这些...
对于微信朋友圈分享,你可以将生成的二维码图片上传至服务器,然后通过微信的分享接口生成带有二维码图片的分享卡片,用户扫描后可以直接跳转到对应的网页。同时,二维码可以携带参数,比如通过URL参数的方式,这样...
在IT行业中,二维码作为一种高效的信息编码方式,广泛应用于各种场景,如名片交换、网页链接分享、支付凭证等。本文将详细讲解如何使用Java语言来实现二维码的生成与解析,这是一项非常实用的技术,尤其在移动互联网...
- **信息分享**:用户可以通过扫描二维码快速获取网页链接、联系信息、电子名片等。 - **支付系统**:在移动支付中,商家的收款二维码被广泛使用,消费者扫描后即可完成支付。 - **广告推广**:二维码可以链接到产品...
ZXing(读作“zebra crossing”,意思是斑马线)在Java平台上原生开发,但提供了多种语言的绑定,使得在不同平台和语言环境中都可以轻松集成二维码扫描功能。 这个“zxing jar包”是ZXing项目的Java实现,通常被...
2. Java 平台:Java 提供了不同的平台版本,如 J2ME(Java 2 Micro Edition)适用于移动设备和嵌入式系统,J2SE(Java 2 Standard Edition)是标准版,J2EE(Java 2 Enterprise Edition)则针对企业级应用。...
1. 接收请求:Servlet监听特定的URL,解析请求参数,获取需要编码的数据。 2. 生成二维码:使用Java的二维码库,如`com.google.zxing`,创建二维码图像。 3. 返回响应:将生成的二维码图像转换为流(例如,JPEG或PNG...
这个库不仅可以用于读取条码,还可以生成新的条码和二维码图像,适用于各种应用场景,如移动应用、网页、桌面应用等。 `core.jar`是ZXing项目的核心库,包含了解码和编码的基本功能。它提供了条码解码引擎,能够...
QR Code在现代生活中广泛应用,如产品标识、网页链接、电子支付等场景。在Java编程环境中,我们可以利用开源库来实现二维码的生成与解析。 生成二维码主要涉及以下步骤: 1. **选择库**:Java中常用的二维码生成库...
JavaScript 是一种轻量级的解释型或即时编译型的编程语言,常用于实现网页上的交互功能。 #### 8.2 表单对象与事件 - **表单对象**:处理 HTML 表单中的元素。 - **事件**:响应用户操作,如点击按钮或改变输入框...
- 使用JSP创建动态网页,展示从后端获取的数据。 - 结合Servlet和JSP实现用户登录界面。 - 利用EL表达式和JSTL标签简化页面代码。 ##### 1.3 JSF - **JSF中主要概念**: - **Component**:UI组件,是JSF的基础...