需求(Java);利用Jsoup架包获取指定网页的全部图片,并自动下载到指定文件夹中

来源:互联网 发布:c 高级编程 第7版 pdf 编辑:程序博客网 时间:2024/05/20 12:25

看清标题,读懂需求,你就成功了一半了!跟往常文章一样,简单粗暴是我的风格,事多还得码代码,不多BB,直接上源码,慢慢读,结束相信你一点会很爽,有疑惑直接留言,我常在!


目标网页URL: http://www.qq.com/

保存地址: d:/img     (自动生成img文件夹)


Java源码:


package cn.ouc.jsoup;


import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;


import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class jsoupByPicture {
public static void main(String[] args) throws IOException {

run("http://www.qq.com/","d:/img");
}


public static void run(String url,String filePath) {
Connection connect = Jsoup.connect(url);
        try {
            // 得到Document对象
            Document document = connect.get();
            // 查找所有img标签
            Elements imgs = document.getElementsByTag("img");
            System.out.println("共检测到下列图片URL:");
            System.out.println("开始下载");
            // 遍历img标签并获得src的属性
            for (Element element : imgs) {
                //获取每个img标签URL "abs:"表示绝对路径
                String imgSrc = element.attr("abs:src");
                // 打印URL
                System.out.println(imgSrc);
                //下载图片到本地
                jsoupByPicture.downImages(filePath, imgSrc);
            }
            System.out.println("下载完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

private static void downImages(String filePath, String imgUrl) {
// TODO Auto-generated method stub
File fileDir=new File(filePath);//若存取文件夹没有,则先创建
if (!fileDir.exists()) {
fileDir.mkdirs();
}
//截取图片文件名
String fileName=imgUrl.substring(imgUrl.lastIndexOf('/')+1,imgUrl.length());

try {
            // 文件名里面可能有中文或者空格,所以这里要进行处理。但空格又会被URLEncoder转义为加号
            String urlTail = URLEncoder.encode(fileName, "UTF-8");
            // 因此要将加号转化为UTF-8格式的%20
            imgUrl = imgUrl.substring(0, imgUrl.lastIndexOf('/') + 1) + urlTail.replaceAll("\\+", "\\%20");


        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

//写出路径
File file=new File(filePath+File.separator+fileName);
if(!file.exists())
try {
      file.createNewFile();
} catch (IOException e1) {

e1.printStackTrace();
}

try {
            //获取图片URL
URL url=new URL(imgUrl);
//获得连接
URLConnection connection=url.openConnection();
//设置10秒的响应时间
connection.setConnectTimeout(10*1000);
//获得输入流
InputStream in=connection.getInputStream();
//获得输出流
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(file));
//构建缓冲区
byte[] buf=new byte[1024];
int size;
//写入到文件
while (-1!=(size=in.read(buf))) {
out.write(buf,0,size);
}
out.close();
in.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

}


阅读全文
1 0
原创粉丝点击