import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;/*** 通过HTML解析实现图片批量下载* @author haikui* @version v1.0* @date 2019年6月10日*/public class HtmlJsoup {/*** 第一步:获取页面的源代码;* 第二步:解析源代码,含有图片的标签,再找到图片标签里面的src或data-imgurl;* 第三步:利用Java里面的net包,网络编程* *//*** 根据网页和编码获取网页内容和源代码* @param url* @param encoding*/public static String getHtmlResourceByUrl(String url,String encoding){StringBuffer buffer   = new StringBuffer();URL urlObj            = null;URLConnection uCon      = null;InputStreamReader in  = null;BufferedReader reader = null;try {// 建立网络连接urlObj = new URL(url);// 创建输入流in =new InputStreamReader(urlObj.openStream(),encoding);// 创建一个缓冲写入流reader = new BufferedReader(in);String line = null;while ((line = reader.readLine()) != null) {// 一行一行追加buffer.append(line+"\r\n");}} catch (Exception e) {e.printStackTrace();} finally{try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}}return buffer.toString();}/*** 功能:Java读取txt文件的内容* 步骤:1:先获得文件句柄* 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取* 3:读取到输入流后,需要读取生成字节流* 4:一行一行的输出。readline()。* 备注:需要考虑的是异常情况* @param filePath*/public static String readTxtFile(String filePath){StringBuffer buffer   = new StringBuffer();try {String encoding="utf-8";File file=new File(filePath);if(file.isFile() && file.exists()){ //判断文件是否存在InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);//考虑到编码格式BufferedReader bufferedReader = new BufferedReader(read);String lineTxt = null;while((lineTxt = bufferedReader.readLine()) != null){buffer.append(lineTxt+"\r\n");}read.close();}else{System.out.println("找不到指定的文件");}} catch (Exception e) {System.out.println("读取文件内容出错");e.printStackTrace();}return buffer.toString();}/*** 根据图片的URL下载的图片到本地的filePath* @param filePath 文件夹* @param imageUrl 图片的网址*/public static void downImages(String filePath,String imageUrl){// 截取图片的名称String fileName = imageUrl.substring(imageUrl.lastIndexOf("/"));//创建文件的目录结构File files = new File(filePath);if(!files.exists()){// 判断文件夹是否存在,如果不存在就创建一个文件夹files.mkdirs();}try {URL url = new URL(imageUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();InputStream is = connection.getInputStream();// 创建文件File file = new File(filePath+fileName);FileOutputStream out = new FileOutputStream(file);int i = 0;while((i = is.read()) != -1){out.write(i);}is.close();out.close();} catch (Exception e) {e.printStackTrace();}}//执行测试程序代码public static void main(String[] args) {//以下被注释的内容可以作为一种测试方法使用,这里直接在txt中粘贴html源码测试/*Scanner input = new Scanner(System.in);System.out.print("请输入网页地址:");String url = input.nextLine();System.out.print("请输入编码方式:");String encoding = input.nextLine();System.out.print("请输入下载到电脑的位置:");String filePath = input.nextLine();*/int count=0;//String url = "https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%B2%F1%C8%AE%CD%BC%C6%AC&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111";//String encoding = "utf-8";String filePath ="/Users/wangyaoxin/Desktop/图片";//String htmlResource = getHtmlResourceByUrl(url, encoding);String htmlResource=readTxtFile("/Users/wangyaoxin/Desktop/htmlResource2.txt");// 解析网页源代码Document document = Jsoup.parse(htmlResource);// 获取所有图片的地址Elements elements = document.getElementsByTag("img");for(Element element : elements){//具体图片url的元素属性看html源码,这里的URL是在data-imgurl中String imgSrc = element.attr("data-imgurl");if (!"".equals(imgSrc) && (imgSrc.startsWith("http://") || imgSrc.startsWith("https://"))) {// 判断imgSrc是否为空且是否以"http://"或"https://"开头System.out.println("正在下载的图片的地址:" + imgSrc);downImages(filePath, imgSrc);count++;}}System.out.println("共下载"+count+"张图片");System.out.println("-------------------------下载完毕!----------------------------");}
}

使用详解:

1、通过getHtmlResourceByUrl方法,获取到网页源码再解析下载图片,实际使用过程中发现获取到的源码不全,所以选择第二种方法

2、把html源码复制到txt文件中,用readTxtFile方法读取文件内容,再调用downImages下载

  • Google浏览器,F12查看源代码,复制html源码到本地到txt文件中
  • 修改main方法测试代码中filePath为本地放置下载图片的文件夹,readTxtFile()参数为txt文件路径,element.attr()参数为图片URL前的key值

参考网址:https://www.cnblogs.com/dorra/p/7710972.html

解析html,批量下载图片(java实现)相关推荐

  1. java中批量下载图片(httpClient)

    如题. java中使用httpClient批量下载图片,代码如下: import java.io.File; import java.io.IOException; import java.io.In ...

  2. java实现批量下载图片并打包成zip

    今天项目经理让做一个功能,就是批量下载图片,整体思路简单,但遇到了一个坑,需求是根据勾选的checkbox,点击下载按钮,弹出选择不同规格的图片对话框,并在下载完成后关闭对话框.坑就在下载完成后关闭对 ...

  3. Java实现批量下载图片,打包成zip压缩包

    /*** 批量下载图片后台逻辑* @return*/ @GetMapping("/downLoad") public void download(HttpServletReques ...

  4. 爬虫小案例:基于Bing关键词批量下载图片(第二版)

    一.需求: 基于Bing网站,输入关键词,批量下载图片保存到本地 二.代码展示: import requests from lxml import etree import os from multi ...

  5. img绝对路径图片显示_使用python爬虫去风景图片网站批量下载图片

    使用python爬虫(requests,BeautifulSoup)去风景图片网站批量下载图片 1.写代码背景: 今天闲来无事,想弄点图片放到电脑,方便以后使用,故去百度查找一些风景图片网站,发现图片 ...

  6. 用python批量下载网络图片_使用python批量下载图片吗?怎么做?

    没想到吧,我们居然可以用python去下载图片,关于单个下载内容,之前已经出了教程告诉大家,大家应该都知道,图片跟文字似的,经常多个发布,我们如果想得到很多个图片,还得一个代码或者一个图片源的去敲击吗 ...

  7. python爬虫入门:搜索和批量下载图片

    目录 python爬虫批量下载图片 前言 一.具体流程 1.使用必应搜索图片 2.实现方法 导入模块 具体代码 二.效果演示 python爬虫批量下载图片 前言 本篇文章以在必应下载硬币图片为例,实现 ...

  8. 小工具:FlickrEdit和Picasa Webalbums Assistant,批量下载图片

    小工具:FlickrEdit和Picasa Webalbums Assistant,批量下载图片 从 The sky of Daemon! 作者:Riku 原文发表于WappBlog: Flickr和 ...

  9. Python爬虫——利用Scrapy批量下载图片

    Python爬虫--利用Scrapy批量下载图片 Scrapy下载图片项目介绍 使用Scrapy下载图片 项目创建 项目预览 创建爬虫文件 项目组件介绍 Scrapy爬虫流程介绍 页面结构分析 定义I ...

  10. node.js爬虫之下载图片,批量下载图片,控制下载图片并行上限

    首先介绍一下爬虫所需要的的包 require("request"); –get post请求页面 require("cheerio") –解析文本对象为DOM对 ...

最新文章

  1. FPGA之道(50)复位的设计
  2. linux 制作deb包的三种方法
  3. 删除元素(LintCode)
  4. usb dfu和usb fastboot的区别
  5. 深度学习论文笔记-Deep Learning Face Representation from Predicting 10,000 Classes
  6. js类型判断(数字、0、、undefined、null)
  7. windows 线程核心内容
  8. pk8/pem秘钥转keystore格式
  9. 日本经验 | 距离最新潮的老年电竞,中国还有多远?
  10. 如何给网页设置自己的字体
  11. NOI2014 起床困难综合症
  12. jieba-analysis java内存占用高
  13. netstat 查看tcp 网络连接
  14. AWS KVS(Kinesis Video Streams)之WebRTC集成过程报错问题整理(七)
  15. vue css过渡及过渡钩子函数介绍
  16. 全平台小程序开发框架Uni-app重点概览
  17. python课件百度文库_python教-教学课件.doc
  18. 伯克利双专业 经济学和计算机专业,美国加州伯克利大学世界排名第几2021
  19. ucos-ii操作系统
  20. doraemon的python 守护进程和Process

热门文章

  1. Windows 10 1809 on ubuntu1804 完美安装docker
  2. 负数二进制转换十进制
  3. ABAP ALV LVC模板
  4. python经典实例应用_《Python经典实例(图灵出品)》([美]史蒂文·F.洛特)【摘要 书评 试读】- 京东图书...
  5. spark streamming + kafka + Redis 实践
  6. Java.lang.Class类 isArray()方法有什么功能呢?
  7. jQuery事件绑定与解绑
  8. 前端面试题及答案(字节跳动)(二)
  9. bestsort 开通公众号了~欢迎关注哟~
  10. qemu-img命令