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

来源:互联网 发布:java jdk中文 编辑:程序博客网 时间:2024/05/18 04:15

利用Java抓取网页上的所有图片:

用两个正则表达式:

1、匹配html中img标签的正则:<img.*src=(.*?)[^>]*?>

2、匹配img标签中得src中http路径的正则:http:\"?(.*?)(\"|>|\\s+)


实现:

[java] view plain copy
 print?
  1. package org.swinglife.main;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.InputStream;  
  6. import java.net.URL;  
  7. import java.net.URLConnection;  
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10. import java.util.regex.Matcher;  
  11. import java.util.regex.Pattern;  
  12.   
  13. /*** 
  14.  * java抓取网络图片 
  15.  * @author swinglife 
  16.  * 
  17.  */  
  18. public class CatchImage {  
  19.   
  20.     // 地址  
  21.     private static final String URL = "http://www.csdn.net";  
  22.     // 编码  
  23.     private static final String ECODING = "UTF-8";  
  24.     // 获取img标签正则  
  25.     private static final String IMGURL_REG = "<img.*src=(.*?)[^>]*?>";  
  26.     // 获取src路径的正则  
  27.     private static final String IMGSRC_REG = "http:\"?(.*?)(\"|>|\\s+)";  
  28.   
  29.       
  30.     public static void main(String[] args) throws Exception {  
  31.         CatchImage cm = new CatchImage();  
  32.         //获得html文本内容  
  33.         String HTML = cm.getHTML(URL);  
  34.         //获取图片标签  
  35.         List<String> imgUrl = cm.getImageUrl(HTML);  
  36.         //获取图片src地址  
  37.         List<String> imgSrc = cm.getImageSrc(imgUrl);  
  38.         //下载图片  
  39.         cm.Download(imgSrc);  
  40.     }  
  41.       
  42.       
  43.     /*** 
  44.      * 获取HTML内容 
  45.      *  
  46.      * @param url 
  47.      * @return 
  48.      * @throws Exception 
  49.      */  
  50.     private String getHTML(String url) throws Exception {  
  51.         URL uri = new URL(url);  
  52.         URLConnection connection = uri.openConnection();  
  53.         InputStream in = connection.getInputStream();  
  54.         byte[] buf = new byte[1024];  
  55.         int length = 0;  
  56.         StringBuffer sb = new StringBuffer();  
  57.         while ((length = in.read(buf, 0, buf.length)) > 0) {  
  58.             sb.append(new String(buf, ECODING));  
  59.         }  
  60.         in.close();  
  61.         return sb.toString();  
  62.     }  
  63.   
  64.     /*** 
  65.      * 获取ImageUrl地址 
  66.      *  
  67.      * @param HTML 
  68.      * @return 
  69.      */  
  70.     private List<String> getImageUrl(String HTML) {  
  71.         Matcher matcher = Pattern.compile(IMGURL_REG).matcher(HTML);  
  72.         List<String> listImgUrl = new ArrayList<String>();  
  73.         while (matcher.find()) {  
  74.             listImgUrl.add(matcher.group());  
  75.         }  
  76.         return listImgUrl;  
  77.     }  
  78.   
  79.     /*** 
  80.      * 获取ImageSrc地址 
  81.      *  
  82.      * @param listImageUrl 
  83.      * @return 
  84.      */  
  85.     private List<String> getImageSrc(List<String> listImageUrl) {  
  86.         List<String> listImgSrc = new ArrayList<String>();  
  87.         for (String image : listImageUrl) {  
  88.             Matcher matcher = Pattern.compile(IMGSRC_REG).matcher(image);  
  89.             while (matcher.find()) {  
  90.                 listImgSrc.add(matcher.group().substring(0, matcher.group().length() - 1));  
  91.             }  
  92.         }  
  93.         return listImgSrc;  
  94.     }  
  95.   
  96.     /*** 
  97.      * 下载图片 
  98.      *  
  99.      * @param listImgSrc 
  100.      */  
  101.     private void Download(List<String> listImgSrc) {  
  102.         try {  
  103.             for (String url : listImgSrc) {  
  104.                 String imageName = url.substring(url.lastIndexOf("/") + 1, url.length());  
  105.                 URL uri = new URL(url);  
  106.                 InputStream in = uri.openStream();  
  107.                 FileOutputStream fo = new FileOutputStream(new File(imageName));  
  108.                 byte[] buf = new byte[1024];  
  109.                 int length = 0;  
  110.                 System.out.println("开始下载:" + url);  
  111.                 while ((length = in.read(buf, 0, buf.length)) != -1) {  
  112.                     fo.write(buf, 0, length);  
  113.                 }  
  114.                 in.close();  
  115.                 fo.close();  
  116.                 System.out.println(imageName + "下载完成");  
  117.             }  
  118.         } catch (Exception e) {  
  119.             System.out.println("下载失败");  
  120.         }  
  121.     }  
  122.   
  123.       
  124. }  
0 0
原创粉丝点击