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");
}
}
运行截图如下:
java 图片下载爬虫_java入门爬虫(爬取网页的图片下载到本地磁盘)相关推荐
- 【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。
1.大作业的内容 本要求使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载. 2.案例需求 要求采用虚拟浏览器等动态爬虫技术,完 ...
- python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片
Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...
- python批量下载静态页面_爬虫实战之,爬取壁纸,批量下载
一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按 ...
- python从网址爬图片协程_Python爬虫多任务协程爬取虎牙MM图片
查看: 4420|回复: 241 [作品展示] Python爬虫多任务协程爬取虎牙MM图片 电梯直达 发表于 2019-4-17 21:35:47 | 只看该作者 |倒序浏览 |阅读模式 马上注册,结 ...
- Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除)
Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除) import requests from bs4 import BeautifulSoup import ti ...
- java爬虫,提供链接直接爬取网页代码
其实我只想要爬到整个网页的源代码的就好.通过java的一个包jsoup,就可以直接爬取了,后面有下载源代码(含jsoup包)的链接. 输入:网页链接 输出:网页源代码 代码比较简单,解析都在代码中: ...
- Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】
Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...
- python批处理实现爬取网页静态图片文件重命名图片统一修改大小等功能
按照特定字符(此处选为字符'j')分割文档成多个小文档 def main():with open("dir/origin.txt","r") as f:temp ...
- Python3爬取网页中图片(2021-01-04 14:06:02),附上完整代码
Python爬取网页中图片,附上完整代码 文章目录 Python爬取网页中图片,附上完整代码 概述 完整代码 概述 批量爬取数据,请遵循robots协议及相关网站协议及说明. 本代码仅供有需要爬取网页 ...
- 用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)
参考文章:https://www.cnblogs.com/franklv/p/6829387.html 今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,因为爬虫只 ...
最新文章
- redis nio 多路复用
- [转载]日历设计之重复事件规则设计
- 解决冲突的拉链法探测的ASL
- python主要用途-python的主要用途是什么
- 【问题和解决】NLTK7.6节nltk.sem遇到的问题
- 收入和贷款有什么关系?
- pat Simulation Test for PAT(B) 9月4日
- 商品库存清单案例java_java实现超市商品库存管理平台
- Django2.0——实现简易登陆、注册
- java模拟借书系统E R图_作业—模拟借书系统
- 路由器tomato固件上搭建svn
- 模拟量输入输出配置及数值的规范化
- Android OpenCV竖屏处理策略和底层代码修改
- http://msdn.itellyou.cn/
- 单线多拨的原理+穿透
- 填写个人资料的HTML文件,vsco注册填写个人资料名称无效怎么办?vsco怎么注册账号?...
- 操作系统知识点(考试版)
- 复制链接到剪切板php,剪切复制粘贴
- epub格式电子书剖析之二:OP…
- 把屏幕竖起来看代码很爽
热门文章
- 信息学奥赛一本通 1197 山区建小学(区间DP)
- 10658830让你的手机会唱歌
- 华为热设计工程师待遇_【华为热设计工程师面试】华为的面试是我面试过程中相对简单的一个。-看准网...
- IE浏览器主页被劫持,如何解决主页被篡改问题?
- python读取grd数据_ARWpost处理后的grd数据使用fortran来读取
- 什么是Apache?Apache是什么意思?
- Capstone/CS5211低成本替代昆泰CH7511B方案
- 旋转矩阵是正交矩阵与伴随性质的证明
- 明尼苏达双城计算机科学硕士申请截止日期,明尼苏达大学双城分校
- veu2 启动添加本地ip访问