• 自己圈养小爬虫(四)——下载图片


    提取出图片链接存入IMAGE_LIST中之后,下面就需要从中提取链接并下载。

    但是在下载的时候发现很多小图片都是logo或者表情,浪费磁盘空间,而且效率底下。所以设置了一个最小大小限制,小于这个大小的图片将会跳过。


    DownImage.java主要方法如下:

    public boolean saveImage(String url){
        System.out.println("开始下载:" + url);
        if(url == null){
            return false;
        }
        try {
            this.url = new URL(url);
            urlConnection = (HttpURLConnection)this.url.openConnection();
            if(urlConnection.getResponseCode() == 200){
                if(urlConnection.getContentLength() < Config.MIN_SIZE){
                    System.out.println("下载图片过小,抛弃:"  + urlConnection.getContentLength());
                    return false;
                }
                inputStream = urlConnection.getInputStream();
                fileName =url.substring(url.lastIndexOf("/") + 1);
                File file = new File(Config.IMAGE_PATH , fileName);
                outputStream = new BufferedOutputStream(new FileOutputStream(file));
                while((imageLenght = inputStream.read(imageBuffer)) > 0){
                    outputStream.write(imageBuffer, 0, imageLenght);
                }
                System.out.println("下载完成:" + fileName);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            return true;
        }finally{
            try {
                if(outputStream != null) outputStream.close();
                if(inputStream != null) inputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return true;
    }
    View Code

    通过HttpURLConnectio请求连接,它可以实现更复杂的请求。如果只是简单请求的话,可以使用InputStream is = this.url.openStream();

    测试,成功!

    期间有一个小插曲,因为想要读取出图片的大小,最开始用的是openStream()这种方法,但是openStream()没有直接读取整个文件的方法,只能把数据存入缓冲区。然后我就很贱的在之前尝试读取了一下长度,结果和读取文件一样,读取一次之后,读取的指针就往下移了设置的缓冲区的大小。

    后果就是所有下载的图片都无法打开,原因是无法读取到文件头。因为我在第一次读取长度的时候读取到了,然后没有保存,这么弱智的错误害的我找了很长时间的问题。

    不明白的查询下InputStream的操作就懂了。

  • 相关阅读:
    RocketMQ简介
    redis简介
    netcat
    NOI2018 归程
    图论小专题B
    CF558E A Simple Task
    图论小专题A
    初等网络流初步
    2019炎德杯知识能力竞赛 游记
    POJ2176 Folding
  • 原文地址:https://www.cnblogs.com/mnight/p/3677652.html
Copyright © 2020-2023  润新知