A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李春林 中级黑马   /  2016-10-8 17:33  /  1212 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文





跟大家分享一下关于网络爬虫核心代码,前一段代码是核心代码,后面的那一段是Demo

[AppleScript] 纯文本查看 复制代码
package com.heima.catchgirl;[/p][p=30, 2, left]
       import java.io.BufferedInputStream;
       import java.io.BufferedOutputStream;
       mport java.io.BufferedReader;
       import java.io.BufferedWriter;
       import java.io.File;
       import java.io.FileOutputStream;
       import java.io.FileReader;
       import java.io.FileWriter;
       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;

       public class CatchGirls {
	
       //定义出这个文本文件的位置
     private static final String girlsFile = "power.txt";
      //这是图片的正则表达式
     private static final String IMAGE_REGEX = "http:[\\.|\\w|\\d|\\/|-|%]+\\.jpg";
    /**
   * 需求:把文本文件里面的数据读取出来
   * 功能一:把文本文件里面的数据拼接成字符串
   * 功能二:把图片链接获取出来
   * 功能三:把这些图片链接保存到一个文本里面
   * 功能四:下载图片
   * @throws Exception 
  */
   public static void main(String[] args) throws Exception {
      //第一步:拿到字符串
      String html = getHTML(girlsFile);
      //第二步:开始匹配找数据
      List<String> list = matchImage(html);
      //第三步:把集合里面的图片链接写出文本文件里面
      printPicUrl(list);
      //第四步:downLoadImage  alt + shift + R 批量改名
      downLoadImage(list);
   }
	
   public static void downLoadImage(List<String> list) throws Exception {
         for (String picUrl : list) {
               //http://img0.bdstatic.com/img/image/advertise/minutemaid.jpg
              //这是截取后面的图片名称
              String picName = picUrl.substring(picUrl.lastIndexOf("/")+1);
            //这个对象是把字符串转成网络链接
             URL url = new URL(picUrl);
            //这个相当于和网络图片建立一个通道
            InputStream os;
             try {
                 os = url.openStream();
            } catch (Exception e) {
                continue;
               //e.printStackTrace();
            }
       BufferedInputStream bis = new BufferedInputStream(os);
       BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("img",picName)));
       byte[] arr = new byte[1024*8*20];
       int len;
       while((len = bis.read(arr)) != -1){
           bos.write(arr, 0, len);
       }
       System.out.println(picName + "....下载成功" );
       bis.close();
       bos.close();
      }
		
   }

    /**
   * 功能三:这个方法主要用于把集合里面的图片链接写出去
   * @param list
   * @throws Exception 
   */
   public static void printPicUrl(List<String> list) throws Exception {
     //遍历
      BufferedWriter bw = new BufferedWriter(new FileWriter("img.txt"));
      for (String picUrl : list) {
         bw.write(picUrl);
         bw.newLine();
      }
      bw.close();
    }

   /**
   * 功能二:这是匹配图片
   * @param html
  * @return
  */
   private static List<String> matchImage(String html) {
        //这个是正则的匹配器
       ArrayList<String> list = new ArrayList<>();
       //使用Pattern封装正则
       Pattern p = Pattern.compile(IMAGE_REGEX);
       Matcher matcher = p.matcher(html);
       while(matcher.find()){
            //group方法是获取
           String picUrl = matcher.group();
           //这一步:把所有的连接添加到集合里面
          list.add(picUrl);
       }
        //返回集合
       return list;
   }

   /**
  * 
  * 功能一:把文本文件里面的数据全部变成字符串
  * @throws Exception 
  */
	
   private static String getHTML(String girlsFile) throws Exception {
        //封装file类
        File file = new File(girlsFile);
        BufferedReader br = null;
        StringBuilder sb = new StringBuilder(); //做拼接
        if(file.isFile()){
            br = new BufferedReader(new FileReader(file));
            String line = null; //读取到文本文件里面的行
            while((line = br.readLine()) != null){
               sb.append(line);
            }
         //sb里面添加完了所有的数据后,我应该怎么做?
       }
       br.close();
       return sb.toString();
		
		
		
  }

   }










需要源文件的,可以下载,如果论坛附件看不到,那么我会把它传到百度网盘去,我把百度网盘的链接发出来,你们可以下载

[Java] 纯文本查看 复制代码
package com.heima.catchgirl;

       import java.io.BufferedReader;
       import java.io.FileOutputStream;
       import java.io.IOException;
       import java.io.InputStream;
       import java.io.InputStreamReader;
       import java.io.UnsupportedEncodingException; 
       import java.net.MalformedURLException;
       import java.net.URL;
       import java.net.URLConnection;

       public class Demo {

       public static void main(String[] args) throws Exception {
            //demo1();
           //下载一张网络图片的做法
          URL url = new URL("http://tupian.enterdesk.com/2013/mxy/10/12/6/3.jpg");
          URLConnection conn = url.openConnection();
          InputStream is = conn.getInputStream();
          FileOutputStream fos = new FileOutputStream("1.jpg");
          byte[] arr = new byte[1024*8];
          int len;
          while((len = is.read(arr)) != -1){
              fos.write(arr, 0, len);
          }
          fos.close();
          is.close();
		
     }


     public static void demo1() throws MalformedURLException, IOException,
         UnsupportedEncodingException {
         //File f = new File("aaa.txt");
         //第一步:封装网络的URL
        URL url = new URL("https://www.baidu.com/");
       //第二步:通过URL对象得到URLConnection对象,相当于打开跟网络的连接
       URLConnection conn = url.openConnection();
       //第三步:得到输入流
      InputStream in = conn.getInputStream();
      //第四步:将得到的字节输入流转换成字符流
     InputStreamReader inr = new InputStreamReader(in,"UTF-8");
     BufferedReader br = new BufferedReader(inr);
     String str;
     while((str = br.readLine()) != null){
         //写出字符串到文本?
        System.out.println(str);
     }
     br.close();
   }

  }
  


网络爬虫核心代码.zip

2.7 KB, 下载次数: 83

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
橘子哥 + 1 + 2

查看全部评分

2 个回复

倒序浏览
mark一下
回复 使用道具 举报
格式可能有些混乱,因为我不是很懂论坛这边的操作,如果,亲们觉得看得不顺眼,那么可以下载源文件
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马