java爬虫下载图片到磁盘_java入门爬虫(爬取网页的图片下载到本地磁盘)
java爬虫入门技术
我们需要用到http协议 从而建立java程序和网页的连接
URL url = new URL("https://www.ivsky.com/tupian/ziranfengguang/");
URLConnection urlConnection=url.openConnection();
urlConnection.connect();//读取网页的html
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
上面的代码就是建立java程序和网页的连接
我们爬虫首先是将网页的Html代码爬下来
接下来我们需要从这些代码中找到有用的东西,我们发现大部分图片会有一个src资源
如果只是找一张图片我们可以直接用find函数查找,但是我们需要多张图片,此时正则表达式就显示了他的威力
我们直接用正则表达式匹配出来src资源
代码如下:
String line = null;
//正则表达式,解释如下在最少的""里面匹配到子表达式 ?相当于懒惰(匹配尽可能少)
Pattern pattern = Pattern.compile("src=\"(.+?)\"");
List list = new ArrayList();
while((line = br.readLine()) != null) {
Matcher m = pattern.matcher(line);
while(m.find()) {
//查到之后添加list里面
list.add(m.group());
}
}
匹配出来这些字符串我们还需要对他们进行一些处理筛选出来图片的地址
代码如下
//筛选src,找到jpg和png和gif结尾的(设置新格式也就是截取字符串)放到图片集合里面
List imglist = new ArrayList();for(String xString : list) {if(xString.endsWith(".jpg\"") || xString.endsWith(".png\"") || xString.endsWith(".gif\"")) {//截取字符串的一部分也就是图片的地址
String partString = xString.substring(5,xString.length() - 1);
imglist.add(partString);
}
}
处理好之后我们就剩下最后一步了(下载)
下载就是将图片读进本地磁盘
代码如下
//开始下载
Date beginDate = newDate();for(String xString : imglist) {
Date partbeginDate= newDate();
URL partUrl;if(!xString.startsWith("http:")) {
partUrl= new URL("http:"+xString);if(!("http:"+xString).startsWith("http://")) {continue;
}
}else{
partUrl= newURL(xString);
}
System.out.println(partUrl);
String nameString= xString.substring(xString.lastIndexOf("/") + 1,xString.length());
File file= new File("E:\\图片下载\\"+nameString);
InputStream is=partUrl.openStream();
BufferedInputStream bis= newBufferedInputStream(is);
BufferedOutputStream bos= new BufferedOutputStream(newFileOutputStream(file));
System.out.println("开始下载" +xString);int len = 0;while((len = bis.read()) != -1){
bos.write(len);
}
System.out.println("下载完成");
Date partendDate= newDate();double ti = (partendDate.getTime() - partbeginDate.getTime()) / 1000;
System.out.println("用时" + String.format("%.8f", ti) + "s");
bis.close();
bos.close();
}
Date endDate= newDate();double ti = (endDate.getTime() - beginDate.getTime() ) / 1000;
System.out.println("全部下载完成");
System.out.println("总用时" + String.format("%.8f", ti) + "s");
代码综合如下
packageworm;import java.io.*;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLConnection;import java.util.*;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importjavax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;public classMain {public static void main(String[] args) throwsException {/** 连接网页*/URL url= new URL("https://www.ivsky.com/tupian/ziranfengguang/");
URLConnection urlConnection=url.openConnection();
urlConnection.connect();//读取网页的html
BufferedReader br = new BufferedReader(newInputStreamReader(urlConnection.getInputStream()));
String line= null;//正则表达式,解释如下在最少的""里面匹配到子表达式 ?相当于懒惰(匹配尽可能少)
Pattern pattern = Pattern.compile("src=\"(.+?)\"");
List list = new ArrayList();while((line = br.readLine()) != null) {
Matcher m=pattern.matcher(line);while(m.find()) {//查到之后添加list里面
list.add(m.group());
}
}
br.close();//筛选src,找到jpg和png和gif结尾的(设置新格式也就是截取字符串)放到图片集合里面
List imglist = new ArrayList();for(String xString : list) {if(xString.endsWith(".jpg\"") || xString.endsWith(".png\"") || xString.endsWith(".gif\"")) {//截取字符串的一部分也就是图片的地址
String partString = xString.substring(5,xString.length() - 1);
imglist.add(partString);
}
}//开始下载
Date beginDate = newDate();for(String xString : imglist) {
Date partbeginDate= newDate();
URL partUrl;if(!xString.startsWith("http:")) {
partUrl= new URL("http:"+xString);if(!("http:"+xString).startsWith("http://")) {continue;
}
}else{
partUrl= newURL(xString);
}
System.out.println(partUrl);
String nameString= xString.substring(xString.lastIndexOf("/") + 1,xString.length());
File file= new File("E:\\图片下载\\"+nameString);
InputStream is=partUrl.openStream();
BufferedInputStream bis= newBufferedInputStream(is);
BufferedOutputStream bos= new BufferedOutputStream(newFileOutputStream(file));
System.out.println("开始下载" +xString);int len = 0;while((len = bis.read()) != -1){
bos.write(len);
}
System.out.println("下载完成");
Date partendDate= newDate();double ti = (partendDate.getTime() - partbeginDate.getTime()) / 1000;
System.out.println("用时" + String.format("%.8f", ti) + "s");
bis.close();
bos.close();
}
Date endDate= newDate();double ti = (endDate.getTime() - beginDate.getTime() ) / 1000;
System.out.println("全部下载完成");
System.out.println("总用时" + String.format("%.8f", ti) + "s");
}
}
运行截图如下:
原文:https://www.cnblogs.com/WINDZLY/p/12548723.html
java爬虫下载图片到磁盘_java入门爬虫(爬取网页的图片下载到本地磁盘)相关推荐
- 【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。
1.大作业的内容 本要求使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载. 2.案例需求 要求采用虚拟浏览器等动态爬虫技术,完 ...
- Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频、图片、获取网页源码等)整理
Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频.图片.获取网页源码等)整理 目录
- python批处理实现爬取网页静态图片文件重命名图片统一修改大小等功能
按照特定字符(此处选为字符'j')分割文档成多个小文档 def main():with open("dir/origin.txt","r") as f:temp ...
- Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】
Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...
- Python3爬取网页中图片(2021-01-04 14:06:02),附上完整代码
Python爬取网页中图片,附上完整代码 文章目录 Python爬取网页中图片,附上完整代码 概述 完整代码 概述 批量爬取数据,请遵循robots协议及相关网站协议及说明. 本代码仅供有需要爬取网页 ...
- 用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)
参考文章:https://www.cnblogs.com/franklv/p/6829387.html 今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,因为爬虫只 ...
- python唯美壁纸_用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)
参考文章:https://www..com/franklv/p/6829387.html 今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,因为爬虫只是很久之前学过 ...
- 入门学习爬取贴吧图片(附完整代码),2021/1/27有效
记录一下爬虫学习爬取贴吧图片,按照以下b站视频教学,2021/1/27亲测有效,不会被封ip. Python爬虫实战讲解:爬取百度贴吧全站图片 结果如下(手动打码): 源代码和笔记如下: #多页爬取' ...
- python抓取网站图片_python抓取图片示例 python抓取网页上图片
python抓取网页上图片 这个错误时是什么意思 下面是代码 import re import urllib.request imp正则表达式匹配的url有错误 for x in add: print ...
- C++实现爬取网页源代码并下载至本地文件(可直接运行)
文章目录 1.引言 2.演示效果 3.源码 4.补充 1.引言 哈喽,各位小伙伴们,今天我给大家分享的是如何用C++实现爬取网页源代码. 本人用的开发环境为visual studio 2013,涉及到 ...
最新文章
- [洛谷P3387]【模板】缩点
- #架构#重新设计socks5代理代码框架
- 八款开源Android游戏引擎
- c++类与类的关联(Association)关系
- python之新式类与经典类
- vim 正则非贪婪模式
- NOIP 2016 游记
- Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-1-举例说明
- vue 花括号里面的变量_二、Vue条件指令
- 如何通过修改注册表来限定Win10 PIN的最小位数
- Python 3 从入门到精通 Mac OS
- 随机过程知识点学习与总结
- 可能是catalan数吧
- c语言转换为python语言_C语言程序转换为Python语言
- gdb打印超长字符串或数组
- 输入起止坐标,返回途径网格。
- 2019辽宁公务员考试:申论突破80+学习计划第一步
- Tomcat配置https 访问http跳转https 配置域名
- java 内存中创建文件_java - 如何在Java中创建一个zip文件 - 堆栈内存溢出
- 计算机和网络之间有个感叹号,网络有个感叹号!电脑无线网络连接不上的几种常见问题...
热门文章
- 如何帮助谷歌鉴别内容重复的网页
- windows 版 arm-elf-gcc(转)
- 【C/C++】lib 和 dll 的区别、生成以及使用详解
- OpenCV的滑块与回调函数
- OpenCV图像处理使用笔记(一)——使用鼠标选取任何形状的ROI
- 开源车牌识别项目,OpenALPR
- java hashedmap_Java基础 - Map接口的实现类 : HashedMap / LinkedHashMap /TreeMap 的构造/修改/遍历/ 集合视图方法/双向迭代输出...
- 计算机软硬件基础体系标准,国内首个计算机软硬件基础体系标准发布
- feign调用soap_Spring Cloud 组件 —— feign
- 12. final修饰符