还是学生的时候就想开发一个Spider程序,但当时被搜索引擎威慑住,认为它一定很难(不过它确实挺难的,呵呵),总觉的无从下手,迟迟都没迈出第一步。无意间,看到一本书上在说Java URL类,开发Spider程序的激情又被激发起来了。由于时间有限,先做一个Spider v1.0,以后有时间再一步一步完善。

Spider v1.0功能:给定一个URL抽取出该页面中的超链接。

Spider v1.0代码:

import java.net.*;
import java.io.*;
public class Spider {

 /**
  * @param args
  */
 public static void main(String[] args)throws Exception {
  // TODO Auto-generated method stub
  URL tirc = new URL("http://www.163.com");
  URLConnection tc=tirc.openConnection();
  BufferedReader in= new BufferedReader(new InputStreamReader(tc.getInputStream()));
  
  String inputLine;
  String result =new String();
  String resultTemp;
  String temp;
  String hrefStar="<a";
  int start=0;
  String hrefEnd="</a>";
  int end=0;
  String href="href=\"";
  int hr=0;
  String endMark="\"";
  int i=0;
  int rStart=0;
  int rEnd=0;
  String devideFlag="\n";
  
  //System.out.println(hrefStar+" "+hrefEnd+" "+href+" "+endMark);
  
  while((inputLine =in.readLine())!=null){
   i=0;
   //System.out.println(inputLine);
   while(i<inputLine.length()){
    start=inputLine.indexOf(hrefStar,i);
    if(start == -1){
     break;
    }
    else{
     end=inputLine.indexOf(hrefEnd, start);
     if(end == -1){
      break;
     }
     else{
      temp=inputLine.substring(start, end+hrefEnd.length());
      i=end+hrefEnd.length();///???
      rStart=0;
      rEnd=0;
      rStart=temp.indexOf(href, rStart);
      if(rStart == -1){
       break;
      }
      else{
       rEnd=temp.indexOf(endMark, rStart+href.length());
       if(rEnd==-1){
        break;
       }
       else{
        resultTemp=temp.substring(rStart+href.length(), rEnd);
        result=result.concat(resultTemp);
        result=result.concat(devideFlag);
       }
      }
      
     }
    }
   }
   //System.out.println(inputLine);
  }
  System.out.println(result);
 }

}
 

-----------------------------------------------------------------------

PS:1、代码中提取的是网易首页的超链接;2、只能提取给定的一个页面,不能根据对结果中的链接继续提取(还不具备爬行能力);3、仅提取超链接。