博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA抓取网页的图片
阅读量:6074 次
发布时间:2019-06-20

本文共 2646 字,大约阅读时间需要 8 分钟。

import
java.io.File;
import
java.io.FileOutputStream;
import
java.io.InputStream;
import
java.net.URL;
import
java.net.URLConnection;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.regex.Matcher;
import
java.util.regex.Pattern;
/*** * java抓取网络图片 * @author swinglife * */
public
class CatchImage
{
// 地址
private
static
final
String URL =
"http://www.csdn.net"
;
// 编码
private
static
final
String ECODING =
"UTF-8"
;
// 获取img标签正则
private
static
final
String IMGURL_REG =
"<img.*src=(.*?)[^>]*?>"
;
// 获取src路径的正则
private
static
final
String IMGSRC_REG =
"http:\"?(.*?)(\"|>|\\s+)"
;
public static void main(String[] args) throws Exception
{ CatchImage cm =
new
CatchImage();
//获得html文本内容
String HTML = cm.getHTML(URL);
//获取图片标签
List<String> imgUrl = cm.getImageUrl(HTML);
//获取图片src地址
List<String> imgSrc = cm.getImageSrc(imgUrl);
//下载图片
cm.Download(imgSrc); }
/*** * 获取HTML内容 * * @param url * @return * @throws Exception */
private String getHTML(String url) throws Exception
{ URL uri =
new
URL(url); URLConnection connection = uri.openConnection(); InputStream in = connection.getInputStream();
byte
[] buf =
new
byte
[
1024
];
int
length =
0
; StringBuffer sb =
new
StringBuffer();
while
((length = in.read(buf,
0
, buf.length)) >
0
) { sb.append(
new
String(buf, ECODING)); } in.close();
return
sb.toString(); }
/*** * 获取ImageUrl地址 * * @param HTML * @return */
private List<String> getImageUrl(String HTML)
{ Matcher matcher = Pattern.compile(IMGURL_REG).matcher(HTML); List<String> listImgUrl =
new
ArrayList<String>();
while
(matcher.find()) { listImgUrl.add(matcher.group()); }
return
listImgUrl; }
/*** * 获取ImageSrc地址 * * @param listImageUrl * @return */
private List<String> getImageSrc(List<String> listImageUrl)
{ List<String> listImgSrc =
new
ArrayList<String>();
for
(String image : listImageUrl) { Matcher matcher = Pattern.compile(IMGSRC_REG).matcher(image);
while
(matcher.find()) { listImgSrc.add(matcher.group().substring(
0
, matcher.group().length() -
1
)); } }
return
listImgSrc; }
/*** * 下载图片 * * @param listImgSrc */
private void Download(List<String> listImgSrc)
{
try
{
for
(String url : listImgSrc) { String imageName = url.substring(url.lastIndexOf(
"/"
) +
1
, url.length()); URL uri =
new
URL(url); InputStream in = uri.openStream(); FileOutputStream fo =
new
FileOutputStream(
new
File(imageName));
byte
[] buf =
new
byte
[
1024
];
int
length =
0
; System.out.println(
"开始下载:"
+ url);
while
((length = in.read(buf,
0
, buf.length)) != -
1
) { fo.write(buf,
0
, length); } in.close(); fo.close(); System.out.println(imageName +
"下载完成"
); } }
catch
(Exception e) { System.out.println(
"下载失败"
); } } }

转载地址:http://acsgx.baihongyu.com/

你可能感兴趣的文章
寻仙——向中国味表白
查看>>
error this is not a media message!!!
查看>>
JavaWeb网上图书商城完整项目--day02-15.登录功能流程分析
查看>>
mysql性能优化总结(MySql避免重复插入记录的几种方法)
查看>>
vi命令使用技巧及经常出现的错误、etc目录下重要文件、环境变量及别名功能...
查看>>
面试官问你“有什么问题问我吗?”,你该如何回答?
查看>>
这么好的平台,居然荒废了这么久没使用,以后要常来!
查看>>
Rails
查看>>
Lightning学習資料
查看>>
字节流与字符流的区别详解
查看>>
js数组去重的4个方法
查看>>
Floyd判圈算法
查看>>
hdu 4965 矩阵快速幂 矩阵相乘性质
查看>>
iOS - App 应用
查看>>
用户登录验证
查看>>
TSVNCache.exe严重占用CPU问题
查看>>
详细易懂的解释变量和指针变量重新赋值的过程和问题
查看>>
Python 操作 MYSQL
查看>>
关于解决javaEE端口占用的方法
查看>>
mysql 更改表名称
查看>>