Java 根据网络URL获取该网页上面所有的img标签并下载图片

说明:根据网络URL获取该网页上面所有的img标签并下载符合要求的所有图片

所需jar包:jsoup.jar

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * 图片批量下载工具类
 * @author Marydon
 * @create time 2016-9-3下午2:01:03
 * @update time 2017年9月30日11:07:02
 * @E-mail:dellshouji@163.com
 */
public class ImgDownloadUtil {

  /**
   * 根据URL获取网页DOM对象
   * @param url
   *      网址
   * @return DOM对象
   */
  public static Document getHtmlDocument(String url) {
    Document document = null;
    URL urlObj = null;
    try {
      // 1.建立网络连接
      urlObj = new URL(url);
      // 2.根据url获取Document对象
      document = Jsoup.parse(urlObj, 5000);// 单位:毫秒超时时间

    } catch (MalformedURLException e) {
      System.out.println("世界上最遥远的距离就是没有网,检查设置!");
      e.printStackTrace();
    } catch (IOException e) {
      System.out.println("您的网络连接打开失败,请稍后重试!");
      e.printStackTrace();
    }

    return document;
  }

  /**
   * 根据URL获取网页源码
   * @param url
   *      网址
   * @return 网页源码
   */
  public static String getHtmlText(String url) {
    String htmlText = "";
    Document document = null;
    URL urlObj = null;
    try {
      // 1.建立网络连接
      urlObj = new URL(url);
      // 2.根据url获取Document对象
      document = Jsoup.parse(urlObj, 5000);// 单位:毫秒超时时间
      // 3.根据dom对象获取网页源码
      htmlText = document.html();
    } catch (MalformedURLException e) {
      System.out.println("世界上最遥远的距离就是没有网,检查设置!");
      e.printStackTrace();
    } catch (IOException e) {
      System.out.println("您的网络连接打开失败,请稍后重试!");
      e.printStackTrace();
    }

    return htmlText;
  }

  /**
   * 操作Dom对象获取图片地址
   * @param document
   *      Dom对象
   * @return 图片地址集合
   */
  public static List<String> getImgAddressByDom(Document document) {
    // 用于存储图片地址
    List<String> imgAddress = new ArrayList<String>();
    if (null != document) {
      // <img src="" alt="" width="" height=""/>
      // 获取页面上所有的图片元素
      Elements elements = document.getElementsByTag("img");
      String imgSrc = "";
      // 迭代获取图片地址
      for (Element el : elements) {
        imgSrc = el.attr("src");
        // imgSrc的内容不为空,并且以http://开头
        if ((!imgSrc.isEmpty()) && imgSrc.startsWith("http://")) {
          // 将有效图片地址添加到List中
          imgAddress.add(imgSrc);
        }
      }
    }

    return imgAddress;
  }

  /**
   * 根据网络URL下载文件
   * @param url
   *      文件所在地址
   * @param fileName
   *      指定下载后该文件的名字
   * @param savePath
   *      文件保存根路径
   */
  public static void downloadFileByUrl(String url, String fileName, String savePath) {
    URL urlObj = null;
    URLConnection conn = null;
    InputStream inputStream = null;
    BufferedInputStream bis = null;
    OutputStream outputStream = null;
    BufferedOutputStream bos = null;
    try {
      // 1.建立网络连接
      urlObj = new URL(url);
      // 2.打开网络连接
      conn = urlObj.openConnection();
      // 设置超时间为3秒
      conn.setConnectTimeout(3 * 1000);
      // 防止屏蔽程序抓取而返回403错误
      conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
      // 3.得到输入流
      inputStream = conn.getInputStream();
      bis = new BufferedInputStream(inputStream);

      // 文件保存位置
      File saveDir = new File(savePath);
      if (!saveDir.exists()) {
        saveDir.mkdirs();
      }
      // 文件的绝对路径
      String filePath = savePath + File.separator + fileName;
      File file = new File(filePath);
      // 4.
      outputStream = new FileOutputStream(file);
      bos = new BufferedOutputStream(outputStream);
      byte[] b = new byte[1024];
      int len = 0;
      while ((len = bis.read(b)) != -1) {
        bos.write(b, 0, len);
      }
      System.out.println("info:" + url + " download success,fileRename=" + fileName);
    } catch (MalformedURLException e) {
      System.out.println("世界上最遥远的距离就是没有网,检查设置");
      System.out.println("info:" + url + " download failure");
      e.printStackTrace();
    } catch (IOException e) {
      System.out.println("您的网络连接打开失败,请稍后重试!");
      System.out.println("info:" + url + " download failure");
      e.printStackTrace();
    } finally {// 关闭流
      try {
        if (bis != null) {// 关闭字节缓冲输入流
          bis.close();
        }

        if (inputStream != null) {// 关闭字节输入流
          inputStream.close();
        }
        if (bos != null) {// 关闭字节缓冲输出流
          bos.close();
        }
        if (outputStream != null) {// 关闭字节输出流
          outputStream.close();
        }

      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

}

测试

public static void main(String[] args) {
  // 1.确定网址
  String url = "http://www.cnblogs.com/Marydon20170307/p/7402871.html";
  // 2.获取该网页的Dom对象
  Document document = getHtmlDocument(url);
  // 3.获取该网页所有符合要求的图片地址
  List<String> imgAddresses = getImgAddressByDom(document);
  String imgName = "";
  String imgType = "";
  // 4.设置图片保存路径
  String savePath = "C:/Users/Marydon/Desktop";
  // 5.批量下载图片
  for (String imgSrc : imgAddresses) {
    // 5.1图片命名:图片名用32位字符组成的唯一标识
    imgName = UUID.randomUUID().toString().replace("-", "");
    // 5.2图片格式(类型)
    imgType = imgSrc.substring(imgSrc.lastIndexOf("."));
    imgName += imgType;
    // 5.3下载该图片
    downloadFileByUrl(imgSrc, imgName, savePath);
  }
}

以上就是Java 根据网络URL获取该网页上面所有的img标签并下载图片的详细内容,更多关于java 下载网络图片的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html文件.可以直接打开,排版都还在. 看了下源码,是把日记存在一个json数组里了,图片还是在服务器,利用url访问,文字是在本地了. 但是想把图片下载到本地,然后和文字对应,哪篇日记下的哪些图片. 大概是如下的json数组. 大概有几百条,分别是头像.内容:文字||内容:图片.时间. 简单明了的jso

  • java实现从网上下载图片到本地的方法

    本文实例讲述了java实现从网上下载图片到本地的方法.分享给大家供大家参考.具体如下: import java.io.*; import java.net.MalformedURLException; import java.net.URL; public static void writeFile(String strUrl,String fileName){ URL url = null; try { url = new URL(strUrl); } catch (MalformedURLE

  • java压缩文件和下载图片示例

    本文实例为大家分享了java压缩文件和下载图片示例,供大家参考,具体内容如下 主页面index.xml <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <title>项目的主页</title> </head> <body> <h2>主页

  • java+MongoDB实现存图片、下载图片的方法示例

    本文实例讲述了java+MongoDB实现存图片.下载图片的方法.分享给大家供大家参考,具体如下: 1.存图片 demo:将某个文件存到mongoDB,这个file可以通过前台参数传入,我这里直接将D://test.png存到mongoDB @RequestMapping("/addFile") @ResponseBody public String addFile(){ MongoClient client = new MongoClient("127.0.0.1"

  • java 实现微信服务器下载图片到自己服务器

     java 实现微信服务器下载图片到自己服务器 此功能的实现需要注意java 中IO流的操作及网路开发, 实现代码: /** * @author why * */ public class PicDownload { /** * * 根据文件id下载文件 * * * * @param mediaId * * 媒体id * * @throws Exception */ public static InputStream getInputStream(String accessToken, Stri

  • java多线程实现下载图片并压缩

    最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地址文件中包含4000个地址左右,也就是说一个文件扫描后需要下载4000个左右的图片,然后压缩,下面把我的实现方式和优化过程记录下来,如果大家有什么更好的方式可以分享. 使用框架:SpringMVC 定时任务实现:继承org.springframework.scheduling.quartz.QuartzJobBean; ftp环境搭建就不说了,在其他博客记录

  • Java如何从服务器中下载图片

    本文实例为大家分享了Java服务器中下载图片的方法,供大家参考,具体内容如下 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import org.apache.commons.io.IOUtils; /** * 从服务器中下载图片 * * @param fileName

  • Java读取网页内容并下载图片的实例

    Java读取网页内容并下载图片的实例 很多人在第一次了解数据采集的时候,可能无从下手,尤其是作为一个新手,更是感觉很是茫然,所以,在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长.   示例代码: import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Fil

  • Java 根据网络URL获取该网页上面所有的img标签并下载图片

    说明:根据网络URL获取该网页上面所有的img标签并下载符合要求的所有图片 所需jar包:jsoup.jar import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.

  • Java通过URL获取公众号文章生成HTML的方法

    说明:通过公众号URL获取的内容,文字可以正常显示,但是图片存在跨域访问的问题,微信不允许跨域访问公众号图片,所以需要将公众号图片从存入本地后,再上传至OSS,然后把HTML中的图片全部替换为自己的OSS地址就可以了 这里就需要在后台对HTML进行DOM的解析,需要用的Jsoup <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId&g

  • java使用TimerTask定时器获取指定网络数据

    复制代码 代码如下: import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask; public class GetYinInf

  • 使用java实现网络爬虫

    接着上面一篇对爬虫需要的java知识,这一篇目的就是在于网络爬虫的实现,对数据的获取,以便分析.-----> 爬虫实现原理 网络爬虫基本技术处理 网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数据采集一般只有以下几种情况: 1)搜索引擎 2)竞品调研 3)舆情监控 4)市场分析 网络爬虫的整体执行流程: 1)确定一个(多个)种子网页 2)进行数据的内容提取 3)将网页中的关联网页连接提取出来 4)将尚未爬取的关联网页内容放到一个队列中 5)从队列中取出一个待爬取的页面,判断之前是否爬过

  • Java 实现网络爬虫框架详细代码

    目录 Java 实现网络爬虫框架 一.每个类的功能介绍 二.每个类的源代码 Java 实现网络爬虫框架 最近在做一个搜索相关的项目,需要爬取网络上的一些链接存储到索引库中,虽然有很多开源的强大的爬虫框架,但本着学习的态度,自己写了一个简单的网络爬虫,以便了解其中的原理.今天,就为小伙伴们分享下这个简单的爬虫程序!! 一.每个类的功能介绍 DownloadPage.java的功能是下载此超链接的页面源代码. FunctionUtils.java 的功能是提供不同的静态方法,包括:页面链接正则表达式

  • Java从网络读取图片并保存至本地实例

    本文实例为大家分享了Java从网络读取图片并保存至本地的具体代码,供大家参考,具体内容如下 package getUrlPic; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public cl

  • Java 读取网络图片存储到本地并生成缩略图

    之前使用 Python 爬虫抓取电影网站信息作为自己网站的数据来源,其中包含的图片都是网络图片,会存在这样一个问题: 当原始网站访问速度比较慢时,网站图片加载时间也会变得很慢,而且如果原始网站挂了,图片就直接访问不到了. 此时的用户体验就很不好,所以对此进行了优化: 每次后端启动时会默认开启任务先将未转换的网络图片存储到本地,再把网页中图片列表改为访问本地图片,这样就解决了加载慢的问题,也降低了和原始网站的耦合性,具体步骤如下: 1.创建用于保存图片的文件夹 我的保存路径:F:\images 2

  • Java使用正则表达式匹配获取链接地址的方法示例

    本文实例讲述了Java使用正则表达式匹配获取链接地址的方法.分享给大家供大家参考,具体如下: 获取页面中字符串的url地址我们都会使用正则表达式来匹配获取了,下面我来给大家总结几个匹配获取链接地址示例. 1.正则表达式中Matcher中find()方法的应用. 2.String对象中的 replaceAll(String regex,String replacement) 方法的使用.通过这个方法去除了不必要的字符串,从而得到了需要的网址和链接文字 例1.超简单的 String content

  • asp获取远程网页的指定内容的实现代码

    代码如下: 复制代码 代码如下: <% '用ASP获取远程目标网页指定内容,代码由广州网站建设http://www.jb51.net提供 On Error Resume Next Server.ScriptTimeOut=9999999 Function getHTTPPage(Path) t = GetBody(Path) getHTTPPage=BytesToBstr(t,"GB2312") End function Function Newstring(wstr,strng

  • python获取指定网页上所有超链接的方法

    本文实例讲述了python获取指定网页上所有超链接的方法.分享给大家供大家参考.具体如下: 这段python代码通过urllib2抓取网页,然后通过简单的正则表达式分析网页上的全部url地址 import urllib2 import re #connect to a URL website = urllib2.urlopen(url) #read html code html = website.read() #use re.findall to get all the links links

随机推荐