`
Luob.
  • 浏览: 1590186 次
  • 来自: 上海
社区版块
存档分类
最新评论

Java 抓取网页上的图片

阅读更多
本文介绍
1.利用正则 匹配到网页上的 图片的路径 和标题
2.然后下载
3.然后上传到服务器


public class Picture {

	private String title;
	private String source;
	private String upPath;
//get set ...
	
}



import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sun.xml.internal.fastinfoset.stax.events.Util;

public class CatchPicture {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//定义抓取图片的 正则表达式
		String regular="[*]<b>.*?</b><br/><img src=\"(.*?)\" border=0 alt=\'(.*?)\' style=\".*?\" class=\".*?\">
";
		List<Picture> list=new CatchPicture().lookWeiboPic("http://gaoxiao.jokeji.cn/GrapHtml/dongtai/20120921221658.htm","GBK",regular,"2,1");
		System.out.println(list.size());
	}
	//根据URL查看网站上的图片
	public List<Picture> lookWeiboPic(String url,String charset,String regular,String attIndex){
		List<Picture> list=new ArrayList<Picture>();
		try {
			//获取填写的url
			//判断所属网站 获取 正则表达式
			//获取图片存放到 list集合
			if(!Util.isEmptyString(url)){
					String htmls = getPageSource(url.trim(),charset);
					Pattern pattern =null;
					pattern = Pattern.compile(regular.trim());
					if(!Util.isEmptyString(htmls)){
						Matcher matcher = pattern.matcher(htmls);
						
						//得到参数属性顺序
						String[] sort = regular.trim().split(","); //下标:0 表示 标题title , 1 表示 图片路径 
						//判断后缀后 得到网站的请求头部 http://www.moonbasa.com/p-032111106.html-->得到 http://www.moonbasa.com
						String[] suffix;
						suffix =url.trim().split("cn");
						String httphread = "";
						if (suffix.length > 1) {
							httphread = suffix[0] + "cn";
	
						} else {
							suffix = url.trim().split("com");
							httphread = suffix[0] + "com";
						}
						//循环匹配找到的
						while(matcher.find()){
							Picture picture=new Picture();
							
							//匹配出title
							if (-1 == Integer.parseInt(sort[0])) {
								// 页面上抓不到标题
								picture.setTitle("");
							} else {
								// 去标题的#
								String title=matcher.group(Integer.parseInt(sort[0])).replace("#", " ");
								picture.setTitle(title);
							}
							
							//匹配出source
							if (-1 == Integer.parseInt(sort[1])) {
								// 页面上抓不到图片路径
								picture.setSource("");
							}else{
								String webImgUrl=matcher.group(Integer.parseInt(sort[1]));
								//判断是绝对路径还是相对路径
								String[] pathType=webImgUrl.split(":");
								if(pathType.length>1){
									//绝对路径
									picture.setSource(webImgUrl);
								}else{
									//判断相对路径是否含有..
									pathType=webImgUrl.split("\\.\\.");
									if(pathType.length>1){
										picture.setSource(httphread+pathType[1]);
									}else{
										if(webImgUrl.startsWith("/")){
											picture.setSource(httphread+pathType[0]);
										}else{
											picture.setSource(httphread+"/"+pathType[0]);
										}
									}
								}
							}
							String upPath=upload(picture.getSource(),"d:\\image\\");
							picture.setUpPath(upPath);
							list.add(picture);
						}//--end while
					}
		
				}
			}catch (Exception e) {
				e.printStackTrace();
			}
		return list;
	} 
	
	/**
	 * 根据网路路径获取 页面源码
	 * @param pageUrl
	 * @param encoding
	 * @return
	 */
	public String getPageSource(String pageUrl,String encoding) {    
    StringBuffer sb = new StringBuffer();    
    try {    
        //构建一URL对象    
        URL url = new URL(pageUrl);    
        //使用openStream得到一输入流并由此构造一个BufferedReader对象    
        BufferedReader in = new BufferedReader(new InputStreamReader(url    
                .openStream(), encoding));    
        String line;    
        //读取www资源    
        while ((line = in.readLine()) != null) {    
            sb.append(line);    
            sb.append("\n");  
        }    
        in.close();    
    } catch (Exception ex) {    
        System.err.println(ex);    
    }    
    return sb.toString();    
}   
	
	/**
	 * 上传 图片 
	 * @param urlStr
	 * @param path
	 * @return
	 * @throws Exception 
	 */
	public String upload(String urlStr,String path) throws Exception{
		Calendar calendar = Calendar.getInstance();
		String month = calendar.get(Calendar.YEAR) + "/"
				+ (calendar.get(Calendar.MONTH) + 1);
		String filename = java.util.UUID.randomUUID().toString()
				+ getExtension(urlStr);
		path =path + month + "/";
		download(urlStr,path,filename);
		return path+month + "/" + filename;
	}
	/**
	 * 根据路径 下载图片 然后 保存到对应的目录下
	 * @param urlString
	 * @param filename
	 * @param savePath
	 * @return
	 * @throws Exception
	 */
	public void download(String urlString, String filename,String savePath) throws Exception {
	    // 构造URL
	    URL url = new URL(urlString);
	    // 打开连接
	    URLConnection con = url.openConnection();
	    //设置请求的路径
	    con.setConnectTimeout(5*1000);
	    // 输入流
	    InputStream is = con.getInputStream();
	
	    // 1K的数据缓冲
	    byte[] bs = new byte[1024];
	    // 读取到的数据长度
	    int len;
	    // 输出的文件流
	   File sf=new File(savePath);
	   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();
	} 
	
/**
 * 根据文件名 获取文件的后缀名
 * @param fileUrl
 * @return
 */
 public String getExtension(String fileUrl){
	 return fileUrl.substring(fileUrl.lastIndexOf("."), fileUrl.length());
 }
}

0
2
分享到:
评论
1 楼 insist_rambler 2013-08-30  
你这个正则我试了一下 ,匹配不到图片的?楼主是怎么抓到图片的呢 ?

相关推荐

    Java抓取网页图片链接地址

    ### Java抓取网页图片链接地址 #### 知识点概览 本文将详细介绍如何使用Java编程语言抓取网页上的图片链接。此技术广泛应用于网络爬虫、数据分析等领域,能够帮助开发者快速获取所需的图像资源。 #### 技术背景与...

    java获取网网页中出现的图片及判断网页代码中是否包含有效图片

    ### Java获取网页中图片的方法与判断网页代码中是否包含有效图片 在当今互联网时代,从网页中抓取图片是常见的需求之一,特别是在数据抓取、网络爬虫或内容分析等应用中。Java作为一种广泛使用的编程语言,提供了...

    Java获取网页中url的图片资源.rar

    Java获取网页中的图片资源,启动线程,智能解析URL,加载图片资源,显示图片数据,测试时候请用IE打开useTrackedImage.html 文件,载入图像文件,并获取该图像文件。本Java例子主要是利用java.awt.MediaTracker 类来...

    java爬虫,抓取网页图片

    通过发送HTTP请求到服务器,获取响应数据,从而获取网页内容。 2. **HTML解析**:抓取到的网页内容通常是HTML格式,因此需要解析HTML来提取图片信息。Java提供了多种库,如Jsoup,用于解析HTML文档,找出图片链接。...

    java 实现整张网页快照

    例如,可以执行一个JavaScript脚本来获取网页的canvas元素,然后调用`toDataURL()`方法将canvas内容转换为Base64编码的图像数据。 5. **处理图像数据**:在Java端接收到Base64编码的图像数据后,将其解码并保存为...

    通过URL地址获取网页生成jpg图片

    本教程将详细介绍如何通过URL地址获取网页并生成jpg图片,同时解决32位和64位运行环境下的兼容性问题。我们将主要使用Java语言来实现这一功能,因为它具有丰富的库和跨平台的特性。 首先,我们需要一个能够处理网络...

    java爬虫抓取网页内容,下载网站图片

    Java爬虫技术是一种用于自动化获取网页内容的程序,它能够模拟人类浏览器的行为,遍历互联网上的页面,提取所需的信息。在本场景中,我们将重点讨论如何利用Java编写爬虫来抓取网页内容并下载其中的图片。 首先,...

    http.rar_HTTP网页_JAVA 获取http_html_java 获取网页_指定提取网页

    在这个"HTTP.rar"压缩包中,我们有一个Java项目,它专门设计用来从指定的HTTP网页中抓取并保存图片。 首先,我们需要理解HTTP协议。HTTP是一种应用层协议,基于TCP/IP通信,允许客户端(如浏览器)向服务器请求资源...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    在Web开发和数据抓取领域,Java爬虫技术是实现网页自动化信息提取的重要手段。本文主要讲述如何利用Java编程语言中的Jsoup库和HttpClient工具包来获取和解析动态生成的数据,特别是那些通过JavaScript动态加载的数据...

    纯Java实现整个网页截图项目源代码

    DJNativeSwing可能提供API来获取当前视口的图像,然后通过多次滚动和截图,合并成一个完整的网页图片。 4. **图像合成**: 由于网页可能比屏幕可视区域大,因此需要将多个小图像拼接起来。Java的图像处理库,如Java ...

    详解JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片

    在Java编程中,抓取网页图片是一项常见的任务,特别是在数据抓取、网页分析或爬虫项目中。本文将详细介绍如何利用Java和正则表达式来抓取网页中的图片链接,并下载这些图片。以下是一个简单的Java程序示例,用于实现...

    JAVA线程根据给定URL生成网页快照

    在Java编程中,生成网页快照是一项常见的任务,它主要用于数据抓取、搜索引擎优化(SEO)或者是为了离线浏览。这个任务通常涉及到网络编程、多线程和网页解析技术。以下将详细介绍如何根据给定的URL利用Java实现线程...

    用java代码下载网页图片

    根据给定的文件信息,我们可以总结出以下与“用Java代码下载网页图片”相关的知识点: ### 1. Java网络编程基础 #### 1.1 URL类的理解与使用 在Java中,`java.net.URL` 类提供了对统一资源定位符 (Uniform ...

    java抓取html中的图片

    java的封装类,可以从指定网络地址,抓取地址中的网页,并分析抓取图片地址,下载到本地

    java 生成网页图片Web源代码

    综上所述,"java 生成网页图片Web源代码"涉及了Java图像处理的基础知识,动态图表生成,服务器端生成图片并返回给Web客户端,以及与前端的交互和安全考虑等多个方面。通过深入理解和实践这些技术,可以构建出高效且...

    java实现网页截图技术

    要获取网页的可视区域截图,可以调用`takeScreenshot`方法: ```java TakesScreenshot screenshot = (TakesScreenshot) driver; File srcFile = screenshot.getScreenshotAs(OutputType.FILE); ``` 5. **保存...

    instagram用户信息 照片 视频动态 Java爬虫.zip

    请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则...

    java将网页保存成mht格式程序

    - **HTTP请求**:使用`java.net.URL`和`URLConnection`类来发起HTTP请求并获取网页的HTML内容。 - **资源定位**:通过解析HTML文档,使用`org.htmlparser`库或其他HTML解析库来提取页面中的资源链接,如图片、样式...

    java 程序设计网页浏览器

    在构建浏览器时,你需要使用`java.net.URL`类来解析和打开网页URL,通过HttpURLConnection或者HttpClient发起HTTP请求获取网页数据。 2. **HTTP协议理解**:HTTP(超文本传输协议)是互联网上应用最为广泛的一种...

    java截图指定网页保存图片

    在Java编程语言中,截取指定网页并保存为图片是一项常见的需求,比如用于网页快照、自动化测试或者数据抓取等场景。实现这个功能通常涉及网络请求、网页解析以及图像处理等多个方面。以下是一个详细的步骤解析: 1....

Global site tag (gtag.js) - Google Analytics