`

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

 
阅读更多


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

用两个正则表达式:

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

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


实现:

[java] view plaincopyprint?

    package org.swinglife.main; 
     
    import java.io.File; 
    import java.io.FileOutputStream; 
    import java.io.InputStream; 
    import java.net.URL; 
    import java.net.URLConnection; 
    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.regex.Matcher; 
    import java.util.regex.Pattern; 
     
    /***
     * java抓取网络图片
     * @author swinglife
     *
     */ 
    public class CatchImage { 
     
        // 地址 
        private static final String URL = "http://www.csdn.net"; 
        // 编码 
        private static final String ECODING = "UTF-8"; 
        // 获取img标签正则 
        private static final String IMGURL_REG = "<img.*src=(.*?)[^>]*?>"; 
        // 获取src路径的正则 
        private static final String IMGSRC_REG = "http:\"?(.*?)(\"|>|\\s+)"; 
     
         
        public static void main(String[] args) throws Exception { 
            CatchImage cm = new CatchImage(); 
            //获得html文本内容 
            String HTML = cm.getHTML(URL); 
            //获取图片标签 
            List<String> imgUrl = cm.getImageUrl(HTML); 
            //获取图片src地址 
            List<String> imgSrc = cm.getImageSrc(imgUrl); 
            //下载图片 
            cm.Download(imgSrc); 
        } 
         
         
        /***
         * 获取HTML内容
         * 
         * @param url
         * @return
         * @throws Exception
         */ 
        private String getHTML(String url) throws Exception { 
            URL uri = new URL(url); 
            URLConnection connection = uri.openConnection(); 
            InputStream in = connection.getInputStream(); 
            byte[] buf = new byte[1024]; 
            int length = 0; 
            StringBuffer sb = new StringBuffer(); 
            while ((length = in.read(buf, 0, buf.length)) > 0) { 
                sb.append(new String(buf, ECODING)); 
            } 
            in.close(); 
            return sb.toString(); 
        } 
     
        /***
         * 获取ImageUrl地址
         * 
         * @param HTML
         * @return
         */ 
        private List<String> getImageUrl(String HTML) { 
            Matcher matcher = Pattern.compile(IMGURL_REG).matcher(HTML); 
            List<String> listImgUrl = new ArrayList<String>(); 
            while (matcher.find()) { 
                listImgUrl.add(matcher.group()); 
            } 
            return listImgUrl; 
        } 
     
        /***
         * 获取ImageSrc地址
         * 
         * @param listImageUrl
         * @return
         */ 
        private List<String> getImageSrc(List<String> listImageUrl) { 
            List<String> listImgSrc = new ArrayList<String>(); 
            for (String image : listImageUrl) { 
                Matcher matcher = Pattern.compile(IMGSRC_REG).matcher(image); 
                while (matcher.find()) { 
                    listImgSrc.add(matcher.group().substring(0, matcher.group().length() - 1)); 
                } 
            } 
            return listImgSrc; 
        } 
     
        /***
         * 下载图片
         * 
         * @param listImgSrc
         */ 
        private void Download(List<String> listImgSrc) { 
            try { 
                for (String url : listImgSrc) { 
                    String imageName = url.substring(url.lastIndexOf("/") + 1, url.length()); 
                    URL uri = new URL(url); 
                    InputStream in = uri.openStream(); 
                    FileOutputStream fo = new FileOutputStream(new File(imageName)); 
                    byte[] buf = new byte[1024]; 
                    int length = 0; 
                    System.out.println("开始下载:" + url); 
                    while ((length = in.read(buf, 0, buf.length)) != -1) { 
                        fo.write(buf, 0, length); 
                    } 
                    in.close(); 
                    fo.close(); 
                    System.out.println(imageName + "下载完成"); 
                } 
            } catch (Exception e) { 
                System.out.println("下载失败"); 
            } 
        } 
     
         
    } 




分享到:
评论

相关推荐

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

    本文将详细介绍如何利用Java和正则表达式来抓取网页中的图片链接,并下载这些图片。以下是一个简单的Java程序示例,用于实现这个功能。 首先,我们需要导入必要的库,包括`java.io`、`java.net`和`java.util.regex`...

    网页抓取 正则表达式 前台处理json对象

    综上所述,这个项目可能涉及到使用网页抓取技术获取网页数据,然后利用正则表达式清洗和解析数据。在前端部分,可能通过AJAX请求获取后端服务的JSON数据,并在页面上进行实时更新和展示。如果涉及到跨域问题,可能...

    精通正则表达式(第三版)简体中文版

    - **Java中的正则表达式**:Java提供了java.util.regex包来支持正则表达式的使用。 - **JavaScript中的正则表达式**:JavaScript的正则表达式对象提供了丰富的功能,包括全局匹配、忽略大小写等选项。 - **.NET框架...

    用正则表达式提取SQL

    标题“用正则表达式提取SQL”涉及到的是在编程中如何使用正则表达式来从文本或代码中抓取SQL语句的相关知识。在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,它能快速地匹配、查找、替换或者...

    精通正则表达式中文版英文版_中文版为扫描版

    正则表达式不仅用于简单的查找和替换,还能在数据验证(如电子邮件地址或电话号码格式检查)、文本分析、网页抓取等场景中发挥巨大作用。通过学习《精通正则表达式》,读者将能够编写更高效、更精确的正则表达式,...

    精通正则表达式电子书

    1. **数据验证**:利用正则表达式进行表单输入的有效性验证。 2. **文本搜索**:在大型文档中查找特定模式或关键词。 3. **格式转换**:将一种格式的数据转换为另一种格式,例如日期格式转换。 4. **错误检测**:...

    正则表达式的妙用

    这展示了一个具体的例子,即如何利用正则表达式解析网页内容,抓取隐藏在HTML代码中的特定信息。 正则表达式的核心在于其模式匹配能力。它由一系列字符、特殊符号和操作符组成,可以匹配各种复杂的数据格式。例如,...

    使用正则表达式抓取页面Email

    在IT行业中,正则表达式...总之,利用正则表达式抓取网页中的电子邮件地址是一项常见的任务,它需要结合对正则表达式、HTML解析以及网络请求的理解。在实际操作中,应根据具体需求进行调整,确保抓取的效率和准确性。

    正则表达式.rar

    本资料压缩包包含了一系列关于Java正则表达式的视频教程,旨在帮助用户深入理解和熟练运用这一技术。 1. **正则表达式简介** - 正则表达式(Regular Expression)是由特殊字符和普通字符组成的模式,用于描述一...

    正则表达式测试工具

    它在编程、数据分析和网页抓取等领域广泛应用。正则表达式的测试工具则是为了方便开发者验证和调试正则表达式而设计的。 "RegexTester.exe"很可能是一款正则表达式测试软件,用户可以通过它输入自定义的正则表达式...

    java正则表达式匹配网页所有网址和链接文字的示例

    在Java编程中,正则表达式是处理文本模式匹配的强大工具,尤其在处理网页内容时,如提取网址和链接文字。这个示例展示了如何使用Java的正则表达式来匹配网页中的所有网址和链接文字。下面将详细讲解相关知识点。 1....

    网页设计 正则表达式

    在网页设计中,正则表达式(Regular Expression)是一种强大的...通过深入理解和熟练运用这些知识点,Java开发者能够在网页设计中充分利用正则表达式,提升工作效率,优化用户体验,从而更好地实现功能需求和数据处理。

    正则表达式_正则表达式_正则_

    正则表达式,简称为正则,是一种强大的文本处理工具,用于匹配、查找、替换等操作。它在编程、数据分析、网页抓取等领域有着广泛的应用。这篇个人总结将深入探讨正则表达式的核心概念、语法元素以及实际应用。 1. *...

    超链接正则表达式

    在网页解析、数据抓取或文本处理等场景中,掌握超链接的正则表达式技巧非常关键。 在JavaScript中,正则表达式是内置的,可以通过构造函数`RegExp`创建,或者直接在字符串中使用。例如,一个简单的超链接正则可能...

    RegexTool正则表达式测试小工具

    正则表达式的概念和使用是许多编程语言和工具的基础部分,如JavaScript、Python、Java等。理解并熟练掌握正则表达式对于提升编程效率和解决文本处理问题至关重要。通过RegexTool这样的工具,开发者可以更直观地看到...

    Java抓取网页图片链接地址

    本示例代码利用了Java正则表达式与`java.util.regex`包中的`Pattern`和`Matcher`类来完成这一任务。 #### 示例代码详解 ##### 正则表达式 1. **匹配`&lt;img&gt;`标签**: ```java String regEx_img = "*src=(.*?)[^&gt;]...

    Web数据抓取中的正则表达式解析2022优秀文档.pptx

    在Web数据抓取中,正则表达式是一种强大的工具,用于解析和提取网页中的特定数据。正则表达式(Regular Expression)是一种模式匹配语言,它允许我们定义一套规则来匹配和处理字符串。以下是对正则表达式的解析和...

    jsp+正则表达式实用总结

    7. **数据提取**:从网页抓取或API响应中,使用正则表达式抽取需要的数据。 通过学习和掌握JSP与正则表达式的结合,开发者不仅可以提高代码的效率,还能提升网站的安全性和用户体验。对于准备面试或者正在进行复习...

    达内JAVA的正则表达式

    提供的`RegexTester.exe`可能是一个用于测试和调试Java正则表达式的工具,它可以帮助开发者直观地看到正则表达式的匹配效果,理解正则表达式的运作方式。 总之,Java中的正则表达式是编程中不可或缺的一部分,掌握...

    正则表达式语法(30分钟入门)

    2. **数据提取**:在网页抓取或数据分析中,正则表达式可以用来从大量文本中提取特定信息。 3. **输入验证**:在网络表单中,使用正则表达式验证用户输入的数据格式,如密码强度、邮箱格式等。 四、学习资源 要...

Global site tag (gtag.js) - Google Analytics