html解析图片url,并用继承Thread类的多线程下载

  • pom依赖
  • Java代码


把对应网页的img元素,通过继承Thread类的多线程下载下来。

pom依赖

<dependencies><!--实现文件下载--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><!--提取html--><dependency><groupId>org.htmlparser</groupId><artifactId>htmlparser</artifactId><version>2.1</version></dependency>
</dependencies>

Java代码

package testthread;import org.apache.commons.io.FileUtils;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;import java.io.File;
import java.io.IOException;
import java.net.URL;//多线程同步下载图片
public class DownloadThread1 extends Thread {private String url;//网图地址private String fileName;//保存文件名public DownloadThread1(String url, String fileName) {this.url = url;this.fileName = fileName;}//线程执行体:下载图片@Overridepublic void run() {Downloader downloader = new Downloader();downloader.downloader(url, fileName);System.out.println("下载文件名为" + fileName);}public static NodeList parser(String url) throws ParserException {/**根据Url创建parser对象**/Parser parser = new Parser(url);/**设置编码,必须与Url编码一样 **/parser.setEncoding("utf-8");/** 构建一个Html页面对象 **/HtmlPage htmlPage = new HtmlPage(parser);parser.visitAllNodesWith(htmlPage);/** 获取Body下面所有的节点,可以想象成类似树状结构 **/NodeList list = htmlPage.getBody();/** 建立一个Filter,用于过滤节点,此处获得形如“<img></img>”这样的节点 **/NodeFilter filter = new TagNameFilter("IMG");/** 得到过滤后的节点 **/list = list.extractAllNodesThatMatch(filter, true);for (int c = 0; c < list.size(); c++) {ImageTag imageTag = (ImageTag) list.elementAt(c);/** 输出图片的链接Url **/System.out.println(imageTag.getImageURL());}return list;}public static void main(String[] args) throws ParserException {NodeList list = DownloadThread1.parser("http://2t6y.mydown.com/yuanqidesktop/tianji.html?softid=585&tid1=256&tid2=1001&tod1=17111");DownloadThread1 thread1 = new DownloadThread1(((ImageTag) list.elementAt(0)).getImageURL(), "1.png");DownloadThread1 thread2 = new DownloadThread1(((ImageTag) list.elementAt(1)).getImageURL(), "2.png");DownloadThread1 thread3 = new DownloadThread1(((ImageTag) list.elementAt(2)).getImageURL(), "3.png");DownloadThread1 thread4 = new DownloadThread1(((ImageTag) list.elementAt(3)).getImageURL(), "4.png");DownloadThread1 thread5 = new DownloadThread1(((ImageTag) list.elementAt(4)).getImageURL(), "5.png");DownloadThread1 thread6 = new DownloadThread1(((ImageTag) list.elementAt(5)).getImageURL(), "6.png");DownloadThread1 thread7 = new DownloadThread1(((ImageTag) list.elementAt(6)).getImageURL(), "7.png");DownloadThread1 thread8 = new DownloadThread1(((ImageTag) list.elementAt(7)).getImageURL(), "8.png");DownloadThread1 thread9 = new DownloadThread1(((ImageTag) list.elementAt(8)).getImageURL(), "9.png");DownloadThread1 thread10 = new DownloadThread1(((ImageTag) list.elementAt(9)).getImageURL(), "10.png");DownloadThread1 thread11 = new DownloadThread1(((ImageTag) list.elementAt(10)).getImageURL(), "11.png");thread1.start();thread2.start();thread3.start();thread4.start();thread5.start();thread6.start();thread7.start();thread8.start();thread9.start();thread10.start();thread11.start();/*"C:\Program Files\Java\jdk1.8.0_271\bin\java.exe" "-javaagent:D:\Users\Kingsoft\IntelliJ IDEA 2021.1.3\lib\idea_rt.jar=59308:D:\Users\Kingsoft\IntelliJ IDEA 2021.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_271\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_271\jre\lib\rt.jar;D:\workspace\Tests\target\classes;D:\Users\maven01_202112011747\apache-maven-3.8.4\.m2\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;D:\Users\maven01_202112011747\apache-maven-3.8.4\.m2\org\htmlparser\htmlparser\2.1\htmlparser-2.1.jar;D:\Users\maven01_202112011747\apache-maven-3.8.4\.m2\org\htmlparser\htmllexer\2.1\htmllexer-2.1.jar" testthread.DownloadThread1
https://dh1.cmcmcdn.com/sem/4/2/b/e/b/42bebba6bfd923aefede0b56d170013d.png
https://img-baofun.zhhainiao.com/market/semvideo/b8c4da367a3c730ca2c2e1eacf422107_preview.jpg
https://img-baofun.zhhainiao.com/market/238/F567AC46D63B85D2AA7E62AD01CD3692_preview.jpg
https://img-baofun.zhhainiao.com/market/238/b9c0ae90409426a9965e7247f9953658_preview.jpg
https://img-baofun.zhhainiao.com/market/238/c4302c9a3921d2f88b1322dc6173915d_preview.jpg
https://img-baofun.zhhainiao.com/market/238/9520e3c1f3b87509042affff4f446fe7_preview.jpg
https://img-baofun.zhhainiao.com/market/238/357E3204B3996B03966EE8116D229DF9_preview.jpg
https://img-baofun.zhhainiao.com/market/39/b25a301ef486487eb7992f1e81bd48d6_preview.jpg
https://img-baofun.zhhainiao.com/market/238/b9c0ae90409426a9965e7247f9953658_preview.jpg
https://img-baofun.zhhainiao.com/market/238/c4302c9a3921d2f88b1322dc6173915d_preview.jpg
https://img-baofun.zhhainiao.com/market/238/9520e3c1f3b87509042affff4f446fe7_preview.jpg
https://img-baofun.zhhainiao.com/market/238/357E3204B3996B03966EE8116D229DF9_preview.jpg
https://img-baofun.zhhainiao.com/market/39/b25a301ef486487eb7992f1e81bd48d6_preview.jpg
https://img-baofun.zhhainiao.com/market/semvideo/b8c4da367a3c730ca2c2e1eacf422107_preview.jpg
https://img-baofun.zhhainiao.com/market/238/F567AC46D63B85D2AA7E62AD01CD3692_preview.jpg
https://img-baofun.zhhainiao.com/market/238/F567AC46D63B85D2AA7E62AD01CD3692_preview.jpg
https://img-baofun.zhhainiao.com/market/238/b9c0ae90409426a9965e7247f9953658_preview.jpg
https://img-baofun.zhhainiao.com/market/238/c4302c9a3921d2f88b1322dc6173915d_preview.jpg
https://img-baofun.zhhainiao.com/market/238/9520e3c1f3b87509042affff4f446fe7_preview.jpg
https://img-baofun.zhhainiao.com/market/238/357E3204B3996B03966EE8116D229DF9_preview.jpg
https://img-baofun.zhhainiao.com/market/39/b25a301ef486487eb7992f1e81bd48d6_preview.jpg
https://img-baofun.zhhainiao.com/market/semvideo/b8c4da367a3c730ca2c2e1eacf422107_preview.jpg下载文件名为1.png
下载文件名为7.png
下载文件名为9.png
下载文件名为6.png
下载文件名为8.png
下载文件名为11.png
下载文件名为3.png
下载文件名为10.png
下载文件名为5.png
下载文件名为4.png
下载文件名为2.pngProcess finished with exit code 0*/}
}//下载器
class Downloader {//下载方法public void downloader(String url, String fileName) {//拷贝url地址到文件try {FileUtils.copyURLToFile(new URL(url), new File(fileName));} catch (IOException e) {e.printStackTrace();System.out.println("IO异常,Downloader方法异常");}}
}

html解析图片url,并用继承Thread类的多线程下载相关推荐

  1. 继承Thread类实现多线程简单实例

    继承Thread类实现多线程简单实例 文章目录 继承Thread类实现多线程简单实例 一.多线程的意义 二.多线程的创建 三.代码 一.多线程的意义 1.为什么要使用多线程 (a)提高用户体验或者避免 ...

  2. Java继承Thread类创建多线程

    Java继承Thread类创建多线程 单线程示例 示例,Example01.java public class Example01{public static void main(String[] a ...

  3. 继承Thread类使用多线程

    java实现多线程有两种方式,一种是继承Thread类,另外一种就是实现Runnable接口. 两种实现方法的优缺点: 使用Thread类实现多线程局限性就是不支持多继承,因为java是不支持类多继承 ...

  4. 多线程之继承Thread类及多线程内存分析

    *创建多线程的一种方式:继承Thread类 * java.lang.Thread是描述多线程的类,要实现多线程程序,一种方式就是继承Thread类 * 1.创建一个类Mythread让其extends ...

  5. 【Java多线程】实现Runnable接口方式 / 继承Thread类方式;使用synchronized锁实现线程安全;线程安全的懒汉式单例模式;死锁问题示例

    Thread 的生命周期 一.实现Runnable接口方式 1.在 run 方法中使用 synchronized 块 /*** 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的 ...

  6. Thread类实现多线程

    线程主体类:必须是实现特定的接口或者继承特定的父类才可以完成. 继承Thread类实现多线程 java.lang.Thread 一个类继承了此类表示这个类就是线程的主体类,并且需要覆写线程的主体方法r ...

  7. android 如何extends 多个,Android多线程:继承Thread类 使用解析(含实例教程)

    前言 在Android开发中,多线程的使用十分常见 今天,我将全面解析多线程其中一种常见用法:继承Thread类. 目录 示意图 1. 简介 示意图 2. 使用讲解 2.1 使用步骤 示意图 2.2 ...

  8. java 继承thread_java线程-创建线程(继承 Thread 类)

    1.创建线程的方式 线程创建方式是:继承 Thread 类,重写 run 方法.如下:public class Task extends Thread{ @Override public void r ...

  9. extends thread java_java学习之- 线程继承Thread类

    标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...

最新文章

  1. Pytorch实践中的几个重要概念
  2. 在线作图|2分钟在线绘制RDA图
  3. C++ Primer 5th笔记(8)chapter8 类:IO库-流的状态
  4. 增强for循环、Map接口遍历、可变參数方法
  5. python-base64编码与解码
  6. 学习笔记(55):Python实战编程-Scrollbar
  7. c# 按位与,按位或
  8. php cbd架构,CBD模式
  9. 上海事业编制 计算机 待遇怎么样,事业单位情况
  10. Android 重写onBackPressed()方法 不执行问题
  11. The 15th UESTC Programming Contest Preliminary D - Destr0y City cdoj1558
  12. Shell编程进阶 1.3data命令
  13. 拼多多上架专供湖北平价口罩 每天300万只
  14. Angular学习总结-入门篇
  15. 到极地拍摄北极熊 你需要这样的装备
  16. 计算机科学技术专业发展分析,计算机科学与技术发展现况分析
  17. 2021-07-22 wifi入门综述整理
  18. 用 Rust 写一个声控小动画
  19. python 期货现货差价监测_期货现货价差小工具——天勤量化(TqSdk)
  20. 东野圭吾梦幻花读后感_东野圭吾《梦幻花》读书笔记

热门文章

  1. 盒子卡在android正在升级,手机开机一直显示android正在升级怎么处理
  2. python 分析外汇数据_Python爬取中国银行外汇牌价(statsmodels预测分析)--(二)
  3. ubuntu加载4G模块驱动的调试过程记录
  4. MG323 AT指令之网络通信
  5. 报错Expected 7 fields in line 9, saw 9
  6. java 实现短信验证码生成器
  7. 有两个磁盘文件 textl.txt text2.txt ,各存放一行英文字母,要求把这两个文件中的信息合并(按字母顺序排列),然后输出到 个新文件 text3.txt
  8. 中国水利专家黄万里先生
  9. 科里奥利力/科氏力(Coriolis Force)
  10. CanNot Open EBTresos(24.0.1) error code:805306369