`
shanyuxiyun
  • 浏览: 11418 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

j2se 抓取网页上图片

    博客分类:
  • j2se
 
阅读更多
[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]
分享到:
评论

相关推荐

    用J2SE实现原网页浏览器(java)

    2. 使用URL和URLConnection进行HTTP通信,获取网页内容。 3. HTML解析,可能需要借助第三方库如Jsoup。 4. 显示HTML内容,可以使用JEditorPane或JavaFX的WebView。 5. 实现前进/后退功能,需要维护浏览历史记录。 6....

    二维码扫描并获取扫描的内容+生成二维码

    二维码技术在现代生活中广泛应用,无论是商品追溯、网页跳转还是支付凭证,都能看到它的身影。在IT行业中,理解和掌握二维码的生成与扫描是一项基础技能。本文将基于ZXing(Zebra Crossing)开源库,深入讲解如何在...

    JSP二维码生成和解码

    在Web应用中,二维码(Quick Response Code,简称QR码)是一种二维条形码,可以存储大量的文本信息,如网址、联系信息、文本、图片等,并能被智能手机等设备快速读取。在Java Web开发中,JSP(JavaServer Pages)...

    java生成二维码两种方式(一种中间带logo,一种不带)源码

    - 然后,将logo添加到二维码图片上: ```java private void generateQRCodeWithLogo(String content, String filePath, String logoPath) { // 生成二维码图片 BufferedImage qrImage = ...

    JAVAEE.docx

    2004年中国软件技术大会上关于IoC微容器(即Jdon框架的实现原理)的讨论强调了跨J2SE/WEB/EJB微容器的重要性,以保护业务核心组件并延长其生命周期,而不是依赖于特定的J2SE/J2EE版本。 ### JSP内置对象详解 JSP...

    java编程二维码要用的jar包

    在Java编程中,生成和解析二维码是一项常见的任务,特别是在移动应用、数据交换或者网页中。为了实现这个功能,开发者通常需要引入特定的库或jar包。在这个场景中,"java编程二维码要用的jar包"指的是那些支持二维码...

    zxing生成二维码

    5. 显示或保存二维码:将位图图像显示在界面上,或者保存为图片文件,例如PNG或JPEG格式。 四、ZXing API详解 - com.google.zxing.qrcode.QRCodeWriter:主要负责生成QR码,提供encode方法。 - ...

    二维码编码(java)

    在实际应用中,还可以结合前端展示,将生成的二维码图片发送给浏览器,从而实现网页上的动态生成和显示。 总之,Java中的二维码编码主要依赖于ZXing库,通过创建`BitMatrix`、编码信息和转换图像来完成。了解这些...

    java链接生成二维码

    对于微信朋友圈分享,你可以将生成的二维码图片上传至服务器,然后通过微信的分享接口生成带有二维码图片的分享卡片,用户扫描后可以直接跳转到对应的网页。同时,二维码可以携带参数,比如通过URL参数的方式,这样...

    Java实现二维码生成和解析代码

    在IT行业中,二维码作为一种高效的信息编码方式,广泛应用于各种场景,如名片交换、网页链接分享、支付凭证等。本文将详细讲解如何使用Java语言来实现二维码的生成与解析,这是一项非常实用的技术,尤其在移动互联网...

    com.google.zxing生成二维码

    - **信息分享**:用户可以通过扫描二维码快速获取网页链接、联系信息、电子名片等。 - **支付系统**:在移动支付中,商家的收款二维码被广泛使用,消费者扫描后即可完成支付。 - **广告推广**:二维码可以链接到产品...

    zxing jar包

    ZXing(读作“zebra crossing”,意思是斑马线)在Java平台上原生开发,但提供了多种语言的绑定,使得在不同平台和语言环境中都可以轻松集成二维码扫描功能。 这个“zxing jar包”是ZXing项目的Java实现,通常被...

    2021-2022计算机二级等级考试试题及答案No.16432.docx

    2. Java 平台:Java 提供了不同的平台版本,如 J2ME(Java 2 Micro Edition)适用于移动设备和嵌入式系统,J2SE(Java 2 Standard Edition)是标准版,J2EE(Java 2 Enterprise Edition)则针对企业级应用。...

    二维码生成器并加密(js+servlet)

    1. 接收请求:Servlet监听特定的URL,解析请求参数,获取需要编码的数据。 2. 生成二维码:使用Java的二维码库,如`com.google.zxing`,创建二维码图像。 3. 返回响应:将生成的二维码图像转换为流(例如,JPEG或PNG...

    二维码绘图jar包-zxing.jar-core.jar-zxing-javase.jar

    这个库不仅可以用于读取条码,还可以生成新的条码和二维码图像,适用于各种应用场景,如移动应用、网页、桌面应用等。 `core.jar`是ZXing项目的核心库,包含了解码和编码的基本功能。它提供了条码解码引擎,能够...

    QRCode:二维码生成和解析

    QR Code在现代生活中广泛应用,如产品标识、网页链接、电子支付等场景。在Java编程环境中,我们可以利用开源库来实现二维码的生成与解析。 生成二维码主要涉及以下步骤: 1. **选择库**:Java中常用的二维码生成库...

    JavaEE(权威)

    JavaScript 是一种轻量级的解释型或即时编译型的编程语言,常用于实现网页上的交互功能。 #### 8.2 表单对象与事件 - **表单对象**:处理 HTML 表单中的元素。 - **事件**:响应用户操作,如点击按钮或改变输入框...

    TongWeb6.0应用开发手册.pdf

    - 使用JSP创建动态网页,展示从后端获取的数据。 - 结合Servlet和JSP实现用户登录界面。 - 利用EL表达式和JSTL标签简化页面代码。 ##### 1.3 JSF - **JSF中主要概念**: - **Component**:UI组件,是JSF的基础...

Global site tag (gtag.js) - Google Analytics