java简易爬虫Crawler

1 篇文章 0 订阅
小型简易爬虫源码(java版)



一,介绍:
           >这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。
       >而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。
       >不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用。

二,代码:

Start_Crawler类:
[java]  view plain  copy
  1. package com.xhs.crawler;  
  2.   
  3. import java.util.Scanner;  
  4.   
  5. /** 
  6.  * @author XHS_12302 
  7.  * @version  1.0 
  8.  * @date  2017_07_11 
  9.  *  
  10.  *  
  11.  * @description 这是我的第一个爬虫,比较简单,没有队列,广度优先算法等,用list集合代替了队列。 
  12.  *              而且只爬取一个网址上面的图片,并不是将网址中的链接<href>加入队列,然后下载一个网址一个网址下载其中的图片。 
  13.  *              不过,这是前期的,处于摸索阶段,后期学完队列和广算后,在涉及一点多线程,肯定会比想象中的更实用 
  14.  */  
  15. public class Start_Crawler {  
  16.     public static void main(String[] args) {  
  17.         System.out.println("请输入网址:");  
  18.           
  19.         //获取用户要爬取的网址  
  20.         Scanner in=new Scanner(System.in);  
  21.         String url=in.next();  
  22.           
  23.         //通过用户的输入建立一个Get_Html的一个g对象  
  24.         Get_Html g=new Get_Html(url);  
  25.         //调用g中的get()方法模拟请求网站服务器,返回回应的字符串  
  26.         String htmlstr=g.get();  
  27.           
  28.         //建立一个Html_analyze对象ha用来分析服务器返回来的字符串  
  29.         Html_analyze ha=new Html_analyze(htmlstr);  
  30.           
  31.         /*for (String href :ha.analyzeHtmlHref()) { 
  32.             System.out.println(href); 
  33.         }*/  
  34.           
  35.         //调用ha.analyzeHtmlImage()方法将分析出来的图片地址放进list里面,传回来一个图片地址集合,  
  36.         //然后新建下载。  
  37.         new Download_pic().Download(ha.analyzeHtmlImage());  
  38.           
  39.         System.out.println("program has done!");  
  40.         in.close();  
  41.     }  
  42. }  

Get_Html类:

[java]  view plain  copy
  1. package com.xhs.crawler;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.URL;  
  10. import java.net.URLConnection;  
  11.   
  12. public class Get_Html {  
  13.     private String url_path;  
  14.     private String htmlstr;  
  15.     StringBuffer contentBuffer = new StringBuffer();  
  16.     Get_Html(String url){  
  17.         this.url_path=url;  
  18.     }  
  19.   
  20.     public String get(){  
  21.            FileWriter fw=null;  
  22.         try {  
  23.             fw=new FileWriter("C:\\Users\\Administrator\\Desktop\\crawler.txt");  
  24.             URL url=new URL(url_path);  
  25.             URLConnection hc=url.openConnection();  
  26.             hc.setConnectTimeout(5000);  
  27.             hc.setDoInput(true);  
  28.             ((HttpURLConnection) hc).setRequestMethod("GET");  
  29.             int returnCode=((HttpURLConnection) hc).getResponseCode();  
  30.             if(returnCode==200){  
  31.                 InputStream input=hc.getInputStream();  
  32.                   
  33.                  InputStreamReader istreamReader = new InputStreamReader(input, "utf-8");    
  34.                  BufferedReader buffStr = new BufferedReader(istreamReader);    
  35.             
  36.                 String str = null;    
  37.                while ((str = buffStr.readLine()) != null)   
  38.                   contentBuffer.append(str);  
  39.                   htmlstr=contentBuffer.toString();  
  40.                   fw.write(htmlstr);  
  41.                input.close();  
  42.                istreamReader.close();  
  43.                buffStr.close();  
  44.                fw.close();  
  45.             }  
  46.         } catch (IOException e) {  
  47.             // TODO Auto-generated catch block  
  48.             e.printStackTrace();  
  49.         }  
  50.         return htmlstr;  
  51.           
  52.     }  
  53.       
  54.       
  55. }  

Html_analyze类:
[java]  view plain  copy
  1. package com.xhs.crawler;  
  2.   
  3.   
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import java.util.regex.Matcher;  
  7. import java.util.regex.Pattern;  
  8.   
  9. public class Html_analyze {  
  10.     private String src;  
  11.     Html_analyze(String src){  
  12.         this.src=src;  
  13.     }  
  14.     public List<String> analyzeHtmlImage(){  
  15.         String regex="http[s]{0,1}://[^\\s]*\\.(jpg|bmp|png)";  
  16.         //String sr="http://img5.imgtn.bdimg.com/it/u=1380084653,2448555822&fm=26&gp=0.jpg";  
  17.         List<String> listImgUrl=new ArrayList<>();  
  18.         Pattern p=Pattern.compile(regex);  
  19.         Matcher m=p.matcher(src);  
  20.         while(m.find()){  
  21.             System.out.println(m.group());  
  22.             listImgUrl.add(m.group());  
  23.         }  
  24.         System.out.println("\n\n总共找到记录:"+listImgUrl.size()+"\n");  
  25.         return listImgUrl;  
  26.     }  
  27.     public List<String>  analyzeHtmlHref(){  
  28.         //分析href标签   并且加入listHref  
  29.         String regex="<a.*?href=\"(.*?)\">";  
  30.         List<String> listHref=new ArrayList<>();  
  31.         Pattern p=Pattern.compile(regex);  
  32.         Matcher m=p.matcher(src);  
  33.         while(m.find()){  
  34.             listHref.add(m.group());  
  35.         }  
  36.         return listHref;  
  37.     }  
  38. }  

Download_pic类:
[java]  view plain  copy
  1. package com.xhs.crawler;  
  2.   
  3. import java.io.File;  
  4.   
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.URL;  
  10.   
  11. import java.util.List;  
  12.   
  13. public class Download_pic {  
  14.     public void Download(List<String> listImgSrc) {  
  15.         int count = 1;  
  16.         for (String url_path : listImgSrc) {  
  17.             InputStream in = null;  
  18.             FileOutputStream fo = null;  
  19.             String imageName = url_path.substring(  
  20.                     url_path.lastIndexOf("/") + 1, url_path.length());  
  21.             try {  
  22.                 byte[] data = new byte[500];// 1024  
  23.                 File f = new File(  
  24.                         "C:\\Users\\Administrator\\Desktop\\crawler\\");  
  25.                 if (!f.exists()) {  
  26.                     f.mkdir();  
  27.                 }  
  28.                 fo = new FileOutputStream(new File(f.getAbsolutePath() + "\\"  
  29.                         + imageName));  
  30.                 URL url = new URL(url_path);  
  31.                 HttpURLConnection con = (HttpURLConnection) url  
  32.                         .openConnection();  
  33.                 con.setConnectTimeout(5000);  
  34.                 con.setDoInput(true);  
  35.                 con.setRequestMethod("GET");  
  36.                 // con.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");  
  37.                 // 设置代理  
  38.                 int numCode = con.getResponseCode();  
  39.                 in = con.getInputStream();// int length  
  40.                 int lengthZ = 0;  
  41.                 if (numCode == 200) {  
  42.                     while ((lengthZ = in.read(data)) != -1) {  
  43.                         fo.write(data, 0, lengthZ); // write(data,0,length);  
  44.                         fo.flush();  
  45.                     }  
  46.                     System.out.println("下载成功:\t" + imageName + "\t剩余:\t"  
  47.                             + (listImgSrc.size() - count));  
  48.                 } else {  
  49.                     System.out.println("访问失败,返回码不是200");  
  50.                 }  
  51.   
  52.             } catch (Exception e) {  
  53.                 // TODO Auto-generated catch block  
  54.                 e.printStackTrace();  
  55.                 System.out.println(imageName + "下载失败");  
  56.             } finally {  
  57.                 try {  
  58.                     if (in != null)  
  59.                         in.close();  
  60.                     if (fo != null)  
  61.                         fo.close();  
  62.                     count++;  
  63.                 } catch (IOException e) {  
  64.                     // TODO Auto-generated catch block  
  65.                     // e.printStackTrace();  
  66.                     System.out.println("关闭流出现点问题··");  
  67.                 }  
  68.             }  
  69.   
  70.         }  
  71.     }  
  72.   
  73. }  

三:截图




这个只是简易的小东西,不过感觉挺好玩的。
       感兴趣的朋友可以自己试试,如果不能满足你要求,
               这儿给你提供一种想法,你可以利用这种特性爬
                      取csdn博客文章访问量。^_^



联系邮箱:xhsgg12302@outlook.com

                                                                                                                                                                                                                                                                                                                                                                2017_07_11
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值