`
天极网络
  • 浏览: 9954 次
  • 性别: Icon_minigender_1
  • 来自: 朔州
社区版块
存档分类
最新评论

Jsoup解析HTML并下载图片

阅读更多
package com.bettem.commons.core.util;

import cn.hutool.core.io.IoUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.URL;
import java.net.URLConnection;

/**
 * JsoupUtil
 *
 * @author liguoliang
 * @date 2015年9月23日下午3:02:56
 */
public class JsoupUtil {
    /**
     * 获取HTML源码
     * liguoliang
     * 2015年9月23日下午3:02:56
     *
     * @param httpUrl 图片网络地址
     * @param encode  编码
     * @return String
     */
    public static String getHtmlCode(String httpUrl, String encode) {
        try {
            URL url = new URL(httpUrl);
            // //使用openStream得到一输入流并由此构造一个BufferedReader对象
            BufferedReader reader = IoUtil.getReader(url.openStream(), encode);
            StringWriter stringWriter = new StringWriter();
            IoUtil.copy(reader, stringWriter);
            return stringWriter.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取HTML元素信息
     * liguoliang
     * 2015年9月23日下午3:03:09
     *
     * @param httpUrl  图片网络地址
     * @param filePath 图片保存路径
     */
    public static String getHtmlPicture(String httpUrl, String filePath) {
        FileOutputStream fos = null;
        String fileName;
        InputStream in = null;
        URL url;
        String imageUrl = null;
        try {
            File imageFile = new File(filePath);
            if (!imageFile.exists()) {
                imageFile.mkdirs();
            }
            Document doc = Jsoup.connect(httpUrl).get();
            //带src属性的元素
            Elements image = doc.select("[src]");
            for (Element src : image) {
                if ("img".equals(src.tagName())) {
                    imageUrl = src.attr("src");
                    System.out.println("图片地址:" + imageUrl);
                    File file = new File(imageUrl);
                    fileName = file.getName();
                    boolean b = (imageUrl.startsWith("http://") || imageUrl.startsWith("https://")) && fileName.contains(".");
                    if (b) {
                        url = new URL(imageUrl);
                        URLConnection connection = url.openConnection();
                        in = connection.getInputStream();
                        //删除相同文件名并重新下载
                        File[] files = imageFile.listFiles();
                        for (File file2 : files) {
                            if (file2.getName().equals(fileName)) {
                                file2.delete();
                            }
                        }
                        File targetFile = new File(filePath + fileName);
                        fos = new FileOutputStream(targetFile);
                        IoUtil.copy(in, fos);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            IoUtil.close(in);
            IoUtil.close(fos);
        }
        return imageUrl;
    }

    /**
     * liguoliang
     * 2015年9月23日下午7:06:57
     *
     * @param filePath 保存地址
     * @param imageUrl 网络地址
     */
    public static void downImag(String filePath, String imageUrl) {
        String fileName = imageUrl.substring(imageUrl.lastIndexOf("/"));
        URL url;
        InputStream in = null;
        OutputStream os = null;
        try {
            File file = new File(filePath);
            if (!file.exists()) {
                file.mkdirs();
            }
            url = new URL(imageUrl);
            URLConnection connection = url.openConnection();
            in = connection.getInputStream();
            File targetPath = new File(filePath + fileName);
            os = new FileOutputStream(targetPath);
            IoUtil.copy(in, os);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IoUtil.close(in);
            IoUtil.close(os);
        }
    }

    public static void main(String[] args) {
        String httpUrl = "http://www.netbian.com/";
        String encode = "gb2312";
//        String encode = "gbk";
//        String encode = "utf8";
        String filePath = "e:/phone/newfile/111/";
        String resource = getHtmlCode(httpUrl, encode);
        System.out.println(resource);
        //方式一:
        /*Document document = Jsoup.parse(resource);
        Elements element = document.getElementsByTag("img");
        for (Element element2 : element) {
            String imgUrl = element2.attr("src");
            File file = new File(imgUrl);
            if (!"".equals(imgUrl) && imgUrl.startsWith("http://") && file.getName().contains(".")) {
                System.out.println("正在批量下图片===========================");
                downImag(filePath, imgUrl);
                System.out.println("图片地址:" + imgUrl);
            }
        }*/
        //方式二:
        getHtmlPicture(httpUrl, filePath);
        httpUrl = "http://img.netbian.com/file/2020/0710/93b4f00e30f595a020b0e7dc09338154.jpg";
        filePath = "e:/phone/newfile";
        //图片下载
        downImag(filePath,httpUrl);
    }
}

分享到:
评论

相关推荐

    Android使用Jsoup技术解析HTML

    Jsoup的核心功能是解析HTML文档,并将其转化为一个DOM(Document Object Model)结构,这样我们就可以像操作XML一样操作HTML元素。DOM是一个树形结构,每个HTML标签都是树中的一个节点。Jsoup提供了丰富的API,如...

    Jsoup解析Html获取新闻列表

    在本文中,我们将深入探讨如何利用Jsoup解析HTML,以便获取新闻列表等网页数据。首先,让我们了解Jsoup的基本用法,然后通过实例演示如何从一个HTML页面中提取新闻列表。 1. **Jsoup简介** - Jsoup是由Jonathon ...

    Jsoup解析html

    1. 解析HTML:使用Jsoup.connect()方法可以连接到一个URL并获取HTML内容,然后通过Jsoup.parse()方法将内容解析为Document对象。例如: ```java String url = "http://example.com"; Document doc = Jsoup.connect...

    jsoup Java HTML解析器

    以下是一个简单的jsoup使用示例,展示如何解析HTML并提取页面标题: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JsoupExample { public static void main(String[] args) ...

    java解析xml,dom解析,jsoup解析,完整项目

    以下是一个使用Jsoup解析XML的例子: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupParser { ...

    关于android之Jsoup解析

    ### 关于Android之Jsoup解析 #### 一、Jsoup简介及主要功能 Jsoup是一款专为Java设计的HTML解析库,它可以帮助开发者轻松地解析HTML文档并从中抽取所需的数据。Jsoup支持从URL地址、文件或字符串等多种来源读取...

    jsoup根据url解析html

    ### jsoup根据URL解析HTML #### 一、jsoup简介 `jsoup`是一款功能强大的Java库,专门用于处理HTML文档。它提供了多种便捷的方法来解析网页内容,并且支持通过DOM(Document Object Model)、CSS选择器及类似jQuery...

    Jsoup源码以及chm文件

    Jsoup是一款非常流行的Java库,专门用于解析HTML和XML文档。它提供了丰富的API,使得开发者可以轻松地抓取、分析和操作网页内容。这个压缩包包含的“Jsoup源码”意味着你可以深入理解其内部工作机制,这对于开发者...

    使用 jsoup 对 HTML 文档进行解析和操作

    jsoup 的 `connect()` 方法用于获取网页内容,然后 `get()` 方法用于执行请求并返回 `Document` 对象,这是解析后的 HTML 结构: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; Document doc ...

    java实现HTML解析图片批量下载

    总之,通过使用Jsoup,我们可以轻松地解析HTML文档,找到所有的图片链接,并使用Java的网络和文件I/O功能将它们下载到本地。这个项目不仅可以作为学习Java网络编程和HTML解析的实践,还可以应用于各种实际场景,例如...

    Android-使用jsoup解析数据的一个手机壁纸小软件

    本项目“Android-使用jsoup解析数据的一个手机壁纸小软件”是一个实际应用示例,展示了如何在Android应用中集成jsoup来获取并显示网络上的壁纸资源。 首先,我们需要理解jsoup的基本用法。jsoup连接到一个URL,下载...

    Java爬虫入门——使用Jsoup解析HTML页面.zip

    如果您下载了本程序,但是该程序无法运行,或者您不会部署,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。...

    jsoup + jdid网页动态解析,类似火狐firebug的html查看

    之后,jsoup就可以大显身手,通过其强大的解析能力,定位并提取出我们需要的数据。 在使用过程中,我们需要注意以下几点: 1. 对于JavaScript依赖的动态内容,必须确保jdid正确执行了所有的脚本。 2. jsoup的选择器...

    Jsoup1.10.2.jar

    **Jsoup 1.10.2.jar** 是一个针对Java平台的强大的HTML解析库,它的主要功能是解析HTML文档并提供类似于jQuery的API来方便地提取和操作数据。这个库使得开发者能够轻松地处理网页内容,无论是从本地文件系统还是通过...

    手把手教学Android用jsoup解析html实例

    2. 对于使用Android Studio的开发者,可以在`build.gradle`文件中添加依赖项:`compile 'org.jsoup:jsoup:1.9.2'`,然后同步项目,这样jsoup库就会被自动下载并引入到项目中。 接下来,我们将通过实例讲解如何使用...

    jsoup-jsoup-1.6.1.zip

    jsoup是一款在Java平台上广泛使用的开源库,它的主要功能是解析HTML文档,提供了一种易于使用且功能强大的API,使得开发者可以方便地提取和操作HTML数据。jsoup的设计目标是处理真实世界中的HTML,它能够处理不规则...

    jsoup jar包

    通过编写Java代码,开发者可以构建爬虫程序,模拟浏览器发送HTTP请求,获取网页响应,然后使用jsoup解析HTML,提取所需信息。 **腾讯电影**是腾讯公司提供的在线电影平台,其博客部分可能包含丰富的电影资讯、影评...

    java源码:HTML解析器 jsoup.rar

    1. 解析HTML:jsoup能够从URL、文件或字符串中加载HTML,并将其解析为一个DOM(文档对象模型)结构。这使得开发者可以像操作DOM树一样轻松地访问HTML元素。 2. CSS选择器:jsoup支持CSS选择器,使得选取特定HTML...

    jsoup java爬虫 糗事 搞笑图片 百科

    我们可以使用jsoup解析HTML文件,提取出搞笑图片、文字等信息,甚至进一步分析和处理这些数据,如进行情感分析、内容过滤等。 总的来说,这个项目涉及了使用jsoup进行网页抓取,结合Java爬虫技术从指定的网页抓取...

    jsoup-1.11.3.jar

    2. **数据提取**:利用jsoup,开发者可以方便地获取页面上的文本、链接、图片等信息,也可以通过XPath或CSS选择器提取特定元素的数据。 3. **数据修改**:jsoup提供了丰富的API,可以添加、删除或修改HTML元素、属性...

Global site tag (gtag.js) - Google Analytics