您的位置:首页 > 理论基础 > 计算机网络

关于一个简单的网络爬虫源码分析

2016-10-25 21:47 441 查看
该爬虫的算法描述如下:

将起始的URL添加到名为listOfPendingURLs的列表中;

当listOfPendingURLs不为空并且listOfTraversedURLs的长度<=100{

从listOfPendingURLs中移除一个URL; 

如果该URL不在listOfTraversedURLs中;

显示该URL

读取该URL的页面,并且对该页面包含的每个URL进行如下操作{

如果不在listOfTraversedURLs中,则将其添加到listOfPendingURLs中;

}

}

源代码:import java.util.Scanner;
import java.util.ArrayList;
import java.net.URL;

public class WebCrawler
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.print("Enter a URL: ");
String url=input.nextLine();
crawler(url);
}

public static void crawler(String startingURL){
//listOfPendingURLs集合用于储存从网页中读取出来的URL,listOfTraversedURLs集合用于储存已经都去过数据的URL
ArrayList<String> listOfPendingURLs=new ArrayList<>();
ArrayList<String> listOfTraversedURLs=new ArrayList<>();

listOfPendingURLs.add(startingURL);
while(!listOfPendingURLs.isEmpty()&&listOfTraversedURLs.size()<=100){
//移除listOfPendingURLs集合中的第一个URL,并将其添加到listOfTraversedURLs集合中,然后读取该移除的URL中的URL
String urlString=listOfPendingURLs.remove(0);
if(!listOfTraversedURLs.contains(urlString)){
listOfTraversedURLs.add(urlString);
System.out.println("Crawl "+urlString);

for(String s:getSubURLs(urlString)){
//将list集合中所有数据添加到listOfPendingURLs集合中
if(!listOfTraversedURLs.contains(s))
listOfPendingURLs.add(s);
}
}
}
}

//该方法的作用是读取urling该URL中的所有URL,并将其储存在list集合之中
public static ArrayList<String> getSubURLs(String urlString){
ArrayList<String> list=new ArrayList<>();

try{
//假如要从一个URL中读取数据,如下两语句是必须进行的
URL url=new URL(urlString);
Scanner input=new Scanner(url.openStream());
int current=0;
while(input.hasNext()){
//line为该URL中的一行数据
String line=input.nextLine();
//URL的格式为以http开头,以(")结束,这个要求是自己定义的
current=line.indexOf("http",current);
while(current>0){
//假如这个URL存在,那么将其储存在list集合中,假如不存在,current=-1;
int endIndex=line.indexOf("\"",current);//???
if(endIndex>0){
list.add(line.substring(current,endIndex));
current=line.indexOf("http:",endIndex);
}
else
current=-1;
}
}
}
catch(Exception ex){
System.out.println("Error: "+ex.getMessage());
}

return list;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络爬虫