Nutch爬取图片保存到本地

修改 org.apache.nutch.fetcher的Fetcher.java

一,追加私有方法

//追加图片写入文件
      private void writeImgToLocal(String url, Content content) {

          String fileType = "";
          int index = url.lastIndexOf(".");
          if (index > 0) {
              fileType = url.substring(url.lastIndexOf(".") + 1).toLowerCase();
          }
          if ("jpg".equals(fileType) || "png".equals(fileType)
                  || "gif".equals(fileType) || "ico".equals(fileType)
                  || "jpeg".equals(fileType) || "bmp".equals(fileType)) {
              String outPath = getConf().get("img.output.path");
              String fileName = DigestUtils.md5Hex(url)+"." + fileType;
              byte[] contentByte = content.getContent();
              try {
                String domain = getDomain(new URL(url).getHost());
                
                File file = new File(outPath + domain);
                if (!file.exists()) {
                    file.mkdir();
                }
                FileOutputStream fos = new FileOutputStream(outPath + domain + "/" + fileName);
                fos.write(contentByte);  
                fos.close();
            } catch (MalformedURLException e1) {
                return;
            } catch (FileNotFoundException e) {
                return;
            }  catch (IOException e) {
                return;
            }
          }
          return;
    }
      
      private String getDomain(String host) {
          
          if (host.contains(".")) {
              return host.substring(host.indexOf(".") + 1);
          }
          return host;
      }

二,在Fetcher.java的run方法中加入调用

              ProtocolOutput output = protocol.getProtocolOutput(fit.url, fit.datum);
              ProtocolStatus status = output.getStatus();
              Content content = output.getContent();
              
              //追加图片写入文件
              writeImgToLocal(fit.url.toString(), content);
              
              ParseStatus pstatus = null;
              // unblock queue
              fetchQueues.finishFetchItem(fit);

              String urlString = fit.url.toString();

              reporter.incrCounter("FetcherStatus", status.getName(), 1);


转载于:https://my.oschina.net/junfrank/blog/355121

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值