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

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

用两个正则表达式:

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

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

实现:

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正则表达式详解、正则表达式 网页抓取、正则表达式抓取网址、正则表达式抓取 div、python正则表达式抓取,以便于您获取更多的相关知识。

时间: 2024-12-03 19:58:58

详解JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片_java的相关文章

详解用Dreamweaver制作网页中的表格

dreamweaver|网页|详解 表格是现代网页制作的一个重要组成部分.表格之所以重要是因为表格可以实现网页的精确排版和定位.虽然现在都提倡WEB标准建立网站,但是有时在网页中还是会应用到表格的. 这个教程我们给大家讲解表格操作的基本方法.在开始制作表格之前,我们首先对表格的各部分的名称做一个介绍.(看下图) 一张表格横向叫行,纵向叫列.行列交叉部分就叫做单元格. 单元格中的内容和边框之间的距离叫边距.单元格和单元格之间的距离叫间距.整张表格的边缘叫做边框. 下面看看我们使用表格制作的页面的实

《Android游戏开发详解》一2.18 使用Java API中的对象

2.18 使用Java API中的对象 Android游戏开发详解现在,让我们暂时从创建自己的类告一段落,来享受一下Java自带的现成的类.使用已有的编程语言,而不是自己创造一种编程语言,其好处在于你可以获取已有的代码,并且在自己的项目中实现它们.好在对于我们来说,Java类配备了内容广泛的文档,涉及它们所包含的变量.如何初始化这些变量,以及它们执行哪些行为,从而我们可以将这些类用于自己的程序,并且只关注它们特定于我们的项目的重要问题. 可以通过如下的链接访问Java SE7的完整文档:http

《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

2.5 良好的Java程序代码编写风格Java和Android开发实战详解Java代码是由程序语句组成的,数个程序语句组合成一个程序块,每一个块拥有数行程序语句或注释,一行程序语句是一个表达式.变量和命令的程序代码. 2.5.1 程序语句Java程序由程序语句(Statement)组成,一行程序语句如同英文的一个句子,内含多个表达式.运算符或Java关键字(详见第3章的说明). 1.程序语句的范例一些Java程序语句的范例,如下所示: int total = 1234; rate = 0.05;

《Android游戏开发详解》一第2章 Java基础知识

第2章 Java基础知识 Android游戏开发详解第1章内容完全是成为Java程序员的准备工作.在本章中,你将编写自己的第一个Java程序(包括一款简单的游戏),并学习如何把游戏的角色.加血(power-up)以及其他实体表示为Java对象.

《Android游戏开发详解》一2.4 执行Java程序

2.4 执行Java程序 Android游戏开发详解要执行一个程序,我们直接在项目的src文件夹(或FirstProgram类)上点击鼠标右键(在Mac上是Control +点击),如图2-16所示. 当执行该程序的时候,会弹出Console(如图2-17所示),并且显示消息"Hello, world! I am now a Java programmer".如果由于任何原因,控制台没有出现,那么可以点击工具栏(Eclipse窗口顶部)上的Windows菜单,然后选择Show View

《Android游戏开发详解》一第1部分 Java基础知识

第1部分 Java基础知识 Android游戏开发详解本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

详解直接插入排序算法与相关的Java版代码实现_java

直接插入排序 直接插入排序的思路很容易理解,它是这样的: 1.把待排序的数组分成已排序和未排序两部分,初始的时候把第一个元素认为是已排好序的. 2.从第二个元素开始,在已排好序的子数组中寻找到该元素合适的位置并插入该位置. 3.重复上述过程直到最后一个元素被插入有序子数组中. 4.排序完成. 示例:思路很简单,但代码并非像冒泡排序那么好写.首先,如何判断合适的位置?大于等于左边.小于等于右边?不行,很多边界条件需要考虑,而且判断次数太多.其次,数组中插入元素,必然需要移动大量元素,如何控制它们的

利用正则表达式抓取博客园列表数据_正则表达式

鉴于我在要完成的asp.net MVC 3 仿照博客园企业系统要用到测试数据,我自己输入太累,所以我就抓取了博客园的部分列表数据,还请dudu不要见怪. 在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间. 现在我就来把我抓取博客园数据的过程叙述一下,如果有朋友有更好的意见,欢迎提出来. 要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用regulator,这个正则表达式工具,我们可以先使用这个

Linux正则表达式特性详解及BRE与ERE的异同点_正则表达式

Linux正则表达式(Regular Expression)主要遵从POSIX BRE或者POSIX ERE标准.什么是POSIX呢,POSIX Portable Operating System Interface 可移植操作系统接口ERE是BRE的扩展版本,具体更强的处理能力,并增加了一些元字符(metacharactor). BRE主要的能力集有: 1) 普通字符(Literal text),如a,b,c等 2)非打印字符,包括TAB,回车,换行,回车换行(WINDOWS) 3)任意字符.