还是学生的时候就想开发一个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、仅提取超链接。