JAVA抓取网页的图片,JAVA利用正则…


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

用两个正则表达式:

1、匹配html中img标签的正则:]*?>

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. public class CatchImage  
  15.   
  16.     // 地址  
  17.     private static final String URL "http://www.csdn.net" 
  18.     // 编码  
  19.     private static final String ECODING "UTF-8" 
  20.     // 获取img标签正则  
  21.     private static final String IMGURL_REG "]*?>" 
  22.     // 获取src路径的正则  
  23.     private static final String IMGSRC_REG "http:\"?(.*?)(\"|>|\\s+)" 
  24.   
  25.       
  26.     public static void main(String[] args) throws Exception  
  27.         CatchImage cm new CatchImage();  
  28.         //获得html文本内容  
  29.         String HTML cm.getHTML(URL);  
  30.         //获取图片标签  
  31.         List imgUrl cm.getImageUrl(HTML);  
  32.         //获取图片src地址  
  33.         List imgSrc cm.getImageSrc(imgUrl);  
  34.         //下载图片  
  35.         cm.Download(imgSrc);  
  36.      
  37.       
  38.       
  39.       
  40.     private String getHTML(String url) throws Exception  
  41.         URL uri new URL(url);  
  42.         URLConnection connection uri.openConnection();  
  43.         InputStream in connection.getInputStream();  
  44.         byte[] buf new byte[1024];  
  45.         int length 0 
  46.         StringBuffer sb new StringBuffer();  
  47.         while ((length in.read(buf, 0buf.length)) 0 
  48.             sb.append(new String(buf, ECODING));  
  49.          
  50.         in.close();  
  51.         return sb.toString();  
  52.      
  53.   
  54.       
  55.     private List getImageUrl(String HTML)  
  56.         Matcher matcher Pattern.compile(IMGURL_REG).matcher(HTML);  
  57.         List listImgUrl new ArrayList();  
  58.         while (matcher.find())  
  59.             listImgUrl.add(matcher.group());  
  60.          
  61.         return listImgUrl;  
  62.      
  63.   
  64.       
  65.     private List getImageSrc(List listImageUrl)  
  66.         List listImgSrc new ArrayList();  
  67.         for (String image listImageUrl)  
  68.             Matcher matcher Pattern.compile(IMGSRC_REG).matcher(image);  
  69.             while (matcher.find())  
  70.                 listImgSrc.add(matcher.group().substring(0matcher.group().length() 1));  
  71.              
  72.          
  73.         return listImgSrc;  
  74.      
  75.   
  76.       
  77.     private void Download(List listImgSrc)  
  78.         try  
  79.             for (String url listImgSrc)  
  80.                 String imageName url.substring(url.lastIndexOf("/"1url.length());  
  81.                 URL uri new URL(url);  
  82.                 InputStream in uri.openStream();  
  83.                 FileOutputStream fo new FileOutputStream(new File(imageName));  
  84.                 byte[] buf new byte[1024];  
  85.                 int length 0 
  86.                 System.out.println("开始下载:" url);  
  87.                 while ((length in.read(buf, 0buf.length)) != -1 
  88.                     fo.write(buf, 0length);  
  89.                  
  90.                 in.close();  
  91.                 fo.close();  
  92.                 System.out.println(imageName "下载完成");  
  93.              
  94.         catch (Exception e)  
  95.             System.out.println("下载失败");  
  96.          
  97.      
  98.   
  99.       
  100. }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值